Page 1 of 2

URL ohne index.php

Posted: Fri Apr 20, 2007 4:50 pm
by Dragonblast
Hallo allerseits !

Meine URL's sind so dargestellt:
http://www.xyz.ch/blog/index.php?/archives/2007/04.html

Wie kann man da das index.php rausnehmen ?


Freundliche Grüsse

Re: URL ohne index.php

Posted: Fri Apr 20, 2007 5:02 pm
by garvinhicking
Hi!

Über die Konfiguration, "URL Rewriting". Dass muss dein Server jedoch understützen (custom .htaccess und/oder mod_rewrite).

Grüße,
Garvin

Posted: Mon Apr 23, 2007 9:15 am
by Dragonblast
Diese Option ist bereits eingestellt ( Admin: +/- Design und Optionen -> URL-Formung -> Use Apache mod_rewrite ), und der Server unterstützt rewriting.

Gibts da noch andere Möglichkeiten ? ( Hat schonmal mit einem S9Y-Blog funktioniert auf dem Server )

Posted: Mon Apr 23, 2007 12:12 pm
by garvinhicking
Hi!

Wenn das aktiviert ist dürfte nirgendwo "index.php?/..." auftauchen. Nenn mal deine URL und sag uns wo das Auftritt.

Grüße,
Garvin

Posted: Mon Apr 23, 2007 1:23 pm
by Dragonblast
Hey

Blogurl wäre diese hier: http://www.bkanal.ch/blog/

Und das "index.php?/" tritt beinahe Überall auf ( Titellink, Authorlink etc. )

Freundliche Grüsse

Posted: Mon Apr 23, 2007 1:33 pm
by garvinhicking
Hi!

Es ist technisch unmöglich dass auf dieser Seite "URL-Rewriting" in der s9y Konfiguration auf "Apache Errorhandling" oder "mod_rewrite" steht. Bitte prüfe es erneut und korrigiere die Einstellung. :)

Grüße,
Garvin

Posted: Fri Apr 27, 2007 9:22 am
by Dragonblast
Habe es erneut überprüft und die Einstellung nochmals auf mod_rewrite gesetzt. Jedoch ohne Erfolg.
Das Problem müsste woanders liegen. Denn diese URL:
http://www.bkanal.ch/blog/index.php?/ar ... nert!.html
funktioniert auch so:
http://www.bkanal.ch/blog/archives/1262 ... nert!.html

Das würde doch heissen, das mod_rewrite läuft, oder ?


Freundliche Grüsse

Posted: Fri Apr 27, 2007 1:45 pm
by garvinhicking
Hi!

Mach mal ein phpMyAdmin auf und führe folgende SQL-Abfrage aus:

Code: Select all

SELECT * FROM serendipity_config WHERE name = 'rewrite';
(wenn du nen anderen Datenbankpräfix hast, den natürlich anpassen)

Dass die URL klappt kann auch einfach heißen dass die .htaccess Datei das korrekt umleitet. Wie s9y die Links aber generiert hängt von obiger Einstellung ab. Es gibt also zwei Teile vom URL Rewritung: Einmal die Umformung für die Links innerhalb von Serendipity, und dann einen Teil der umgeformte Links auf die richtige URL umbiegt.

Grüße,
Garvin

Posted: Fri Apr 27, 2007 6:44 pm
by Dragonblast

Code: Select all

SQL-Abfrageergebnis

Host: localhost
Datenbank: bkanalch_cakephp
Erstellungszeit: 27. April 2007 um 18:27
Erstellt von: phpMyAdmin 2.6.2-Debian-3sarge3 / MySQL 4.1.15-Debian_0.dotdeb.4-log
SQL-Befehl: SELECT * FROM blog_config WHERE name = 'rewrite' LIMIT 0, 30;
Zeilen: 1
name 	 value 	 authorid
rewrite  rewrite   0

Genau diese Einstellung habe ich geprüft... Kanns mir echt nicht erklären..

Posted: Sun Apr 29, 2007 1:40 pm
by garvinhicking
Hi!

Hm. Stells mal testweise auf "errordocs", den Inhalt der Variable?

Das ist sehr strange. Du hast aber schon ne aktuelle s9y version und die nicht selber gepatcht an irgendwelchen stellen, oder?

Grüße,
Garvin

Posted: Mon Apr 30, 2007 11:22 am
by Dragonblast
Das Einzige was ich gepatcht habe, war die .htaccess. Und zwar weil der Blog in CakePHP läuft, und so der Pfad angepasst werden musste.

Diese sieht nun wie folgt aus:

Code: Select all

# BEGIN s9y
ErrorDocument 404 index.php
DirectoryIndex index.php
php_value session.use_trans_sid 0
php_value register_globals off

RewriteEngine On
RewriteBase /blog/
RewriteRule ^(archives/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+\.html) index.php?/$1 [NC,L,QSA]
RewriteRule ^(authors/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+) index.php?/$1 [NC,L,QSA]
RewriteRule ^(feeds/categories/([0-9;]+)-[0-9a-z\.\_!;,\+\-\%]+\.rss) index.php?/$1 [NC,L,QSA]
RewriteRule ^(feeds/authors/([0-9]+)-[0-9a-z\.\_!;,\+\-\%]+\.rss) index.php?/$1 [NC,L,QSA]
RewriteRule ^(categories/([0-9;]+)-[0-9a-z\.\_!;,\+\-\%]+) index.php?/$1 [NC,L,QSA]
RewriteRule ^archives([/A-Za-z0-9]+)\.html index.php?url=/archives/$1.html [NC,L,QSA]
RewriteRule ^([0-9]+)[_\-][0-9a-z_\-]*\.html index.php?url=$1-article.html [L,NC,QSA]
RewriteRule ^feeds/(.*) index.php?url=/feeds/$1 [L,QSA]
RewriteRule ^unsubscribe/(.*)/([0-9]+) index.php?url=/unsubscribe/$1/$2 [L,QSA]
RewriteRule ^approve/(.*)/(.*)/([0-9]+) index.php?url=approve/$1/$2/$3 [L,QSA]
RewriteRule ^delete/(.*)/(.*)/([0-9]+) index.php?url=delete/$1/$2/$3 [L,QSA]
RewriteRule ^(admin|entries)(/.+)? index.php?url=admin/ [L,QSA]
RewriteRule ^archive/? index.php?url=/archive [L,QSA]
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rss|rdf|rss2|xml) rss.php?file=$1&ext=$2
RewriteRule ^(plugin|plugin)/(.*) index.php?url=$1/$2 [L,QSA]
RewriteRule ^search/(.*) index.php?url=/search/$1 [L,QSA]
RewriteRule ^comments/(.*) index.php?url=/comments/$1 [L,QSA]
RewriteRule ^(serendipity\.css|serendipity_admin\.css) index.php?url=/$1 [L,QSA]
RewriteRule ^index\.(html?|php.+) index.php?url=index.html [L,QSA]
RewriteRule ^htmlarea/(.*) htmlarea/$1 [L,QSA]
RewriteRule (.*\.html?) index.php?url=/$1 [L,QSA]

<Files *.tpl.php>
    deny from all
</Files>

<Files *.tpl>
    deny from all
</Files>

<Files *.sql>
    deny from all
</Files>

<Files *.inc.php>
    deny from all
</Files>

<Files *.db>
    deny from all
</Files>

# END s9y

Schalte ich nun auf errodocs, dann sieht die .htaccess so aus:

Code: Select all

# BEGIN s9y
ErrorDocument 404 /blog/index.php
DirectoryIndex /blog/index.php
php_value session.use_trans_sid 0
php_value register_globals off

<Files *.tpl.php>
    deny from all
</Files>

<Files *.tpl>
    deny from all
</Files>

<Files *.sql>
    deny from all
</Files>

<Files *.inc.php>
    deny from all
</Files>

<Files *.db>
    deny from all
</Files>

# END s9y
Und ich erhalte vom Browser folgende Meldung:

Code: Select all

Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.

Posted: Wed May 02, 2007 10:59 am
by garvinhicking
Hi!

Also ich verstehe nicht ganz was abläuft. Ich reduziere den Thread jetzt mal auf das eigentliche Problem, die .htaccess hat damit nichts zu tun (da dies die "Annahme"-Stelle ist, nicht die "Ausgabe-Stelle" von links).

Die Ausgabestelle von internen Serendipity-Links befindet sich in der DAtei

include/functions_permalinks.inc.php

Dort gibt es die Funktion

serendipity_archiveURL()

diese erzeugt einen Link zu einem Eintrag und benutzt dafür eine Hilfsfunktion serendipity_rewriteURL(), die den spezifischen Link so umformatiert dass er "hübsch" aussieht.

Diese Funktion benutzt folgendes Codesegment:

Code: Select all

function serendipity_rewriteURL($path, $key='baseURL', $forceNone = false) {
    global $serendipity;
    return $serendipity[$key] . ($serendipity['rewrite'] == 'none' || ($serendipity['rewrite'] != 'none' && $forceNone) ? $serendipity['indexFile'] . '?/' : '') . $path;
}
Sprich, es fügt die Variable $serendipity['baseURL'] vor den Link, und prüft dann ob $serendipity['rewrite'] einen anderen String als "none" enthält. Wenn es "none" enthält, wird das "index.php?/" davor gehangen, sonst nicht.

$serendipity['rewrite'] wird anhand des Datenbankwertes "rewrite" in der serendipity_config-Tabelle gesetzt. In deinem Fall muss $serendipity['rewrite'] also auf 'rewrite' oder 'errordocs' stehen.

Wenn es aber darauf steht, ist es eigentlich unmöglich, dass ein "index.php?/" davor gehangen wird.

Hast Du mal deine Permalinkkonfiguration geprüft? Nicht dass dort irgendwo ein "index.php?/" eingetragen ist?

Grüße,
Garvin

Posted: Fri May 04, 2007 2:00 pm
by Dragonblast
Nochmals besten Dank für deine Mühen !!

Bei den Permalinks ist alles korrekt ( ohne index.php ) eingestellt. Hab ich
nochmals gechecked.

Habe die Funktion mal so umegestellt, dass sie nur noch "statisch" diese
Links erzeugt. Und die funktioniert ohne Problem ( Links werden korrekt angezeigt ).

Code: Select all

function serendipity_rewriteURL($path, $key='baseURL', $forceNone = false) {
    global $serendipity;
    return $serendipity[$key] . $path;
}
Nun kann es doch nur noch daran liegen, dass der Wert vom rewrite Feld nicht übergeben wird...

Ich habe die Variable so versucht auszugeben:
echo "----" . $serendipity['rewrite'] . "**";

Und kriege nur ein "----**". Woran könnte das noch liegen ?


Vielen Dank nochmals !

Posted: Fri May 04, 2007 2:37 pm
by garvinhicking
Hi!

Hm, das klingt danach als wäre $serendipity['rewrite'] nicht gesetzt?!

Editier mal deine index.php, und direkt nach dem include 'serendipty_config.inc'.php fügst du ein:

Code: Select all

die('<pre>' . print_r($serendipity, true) . '</pre>');
Schau dann mal ob 'Rewrite' dort auftaucht. Ich wüsste nicht wieso 'rewrite' nicht in $serendipity geschrieben werden könnte, aber die anderen werte auch. Nur wenn die spalte 'authorid' in serendipity_config für den wert 'Rewrite' auf einem Wert ungleich 1 stünde, aber laut deinem SQL-Auszug steht das ja (wie erforderlich) auf 0...

Grüße,
Garvin

Posted: Fri May 04, 2007 4:14 pm
by Dragonblast
Ist im Array vorhanden:

Code: Select all

Array
(
    [GET] => Array
        (
            [action] => 
            [adminAction] => 
        )

    [POST] => 
    [COOKIE] => 
    [templatePath] => templates/
    [serendipityPath] => [ZENSUR]
    [indexFile] => index.php
    [version] => 1.0.3
    [defaultTemplate] => carl_contest
    [production] => 1
    [rewrite] => rewrite
    [messagestack] => Array
...