rewrite bringt unerwartete Anzeige in Browserzeile
frankx
- webserver
0 Christian Seiler0 frankx
Hellihello
wie in http://forum.de.selfhtml.org/archiv/2008/5/t170571/#m1115241 zusammengestellt, habe ich
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?url=$0 [L]
eingebaut.
Das "funzt" auch, aber beim _ersten_ Aufruf von erhalte ich:
http://example.com/final_draft
erhalt ich in der Adresszeile des Browsers:
http://example.com/final_draft/?url=/var/www/vhosts/exampl.com/subdomains/examplesubdomainname/httpdocs/final_draft
bei weiteren Links dann "example.com/konakt" "example.com/impressum" nicht mehr. Wie kann das sein? Ich dachte, der "rewrite" passiert nur für den Server, wenn man nicht einen R=301 oder so angibt. Also dass der Client schlicht die Rückgabe der index.php?url=impressum zurückbekommt, ohne aber zu "wissen", dass dies von der "index.php" kommt, es könnte ja auch die "rewrite.php" oder sonstwas sein.
Dank und Gruß,
Hallo Frank,
Wie kann das sein? Ich dachte, der "rewrite" passiert nur für den Server, wenn man nicht einen R=301 oder so angibt.
Prinzipiell richtig. Allerdings kann man mit so wenig Informationen kaum eine sinnvolle Diagnose aufstellen.
Was auffällt: RewriteBase fehlt.
a) Wenn Du mod_rewrite in einer .htaccess oder einem <Directory>-Block verwendest, dann benötigst Du im Prinzip diese Angabe. Ein Weglassen könnte in meinen Augen in Verbindung mit anderen obskuren Umständen zu Deinem Problem führen.
b) Wenn Du mod_rewrite in der Serverkonfiguration (<VirtualHost>, Hauptkonfig) verwendest, dann solltest Du RewriteBase *nicht* angeben - dann ist aber auch die Angabe eines relativen Pfades für das Rewrite-Ziel falsch und eben dieser Fehler könnte in meinen Augen ebenfalls zu dem von Dir beschriebenen Problem führen. In der Serverkonfiguration wäre korrekt:
RewriteRule /(.*) /index.php?url=$1 [L]
Wenn Dir das nicht weiterhilft: RewriteLog anschalten, RewriteLogLevel hoch setzen, Ergebnis betrachten. Wenn das immer noch nicht weiterhilft: Die HTTP-Header im Browser ansehen (z.B. LiveHTTPHeaders im Firefox).
Viele Grüße,
Christian
Hellihello Christian,
merci.
Hallo Frank,
Wie kann das sein? Ich dachte, der "rewrite" passiert nur für den Server, wenn man nicht einen R=301 oder so angibt.
Prinzipiell richtig. Allerdings kann man mit so wenig Informationen kaum eine sinnvolle Diagnose aufstellen.
(;-)
Was auffällt: RewriteBase fehlt.
a) Wenn Du mod_rewrite in einer .htaccess
RewriteBase / ?
Bezieht sich dann auf das aktuelle Verzeichnis, innerhalb dessen die .htaccess liegt?
RewriteCond %{REQUEST_FILENAME} !-d
hab ich jetzt mal noch dazugefügt. Damit wird dann zumindest die Bedingung nicht erfüllt, wenn das Verzeichnis existiert.
Jetzt dachte ich, es geht, aber der FF zeigt dann immer noch die url=kompletterSystemPfad an. Kann es sein, dass er das im Cache gebunkert hat? Denn IE zeigte das nicht, und nach Löschen des FF-Caches ist der Spuk dort auch vorbei.
RewriteBase / hab ich aber auch gesetzt.
Dank und Gruß,
Hallo Frank,
Was auffällt: RewriteBase fehlt.
a) Wenn Du mod_rewrite in einer .htaccess
RewriteBase / ?
Ja (ohne Fragezeichen ;-)).
Bezieht sich dann auf das aktuelle Verzeichnis, innerhalb dessen die .htaccess liegt?
Ja.
Jetzt dachte ich, es geht, aber der FF zeigt dann immer noch die url=kompletterSystemPfad an. Kann es sein, dass er das im Cache gebunkert hat?
301-Redirects werden gecachet (zumindest für die aktuelle Browsersitzung), 302 nicht. Falls Du beim Experimentieren mal ein R=301 drin hattest, würde das einiges erklären...
Viele Grüße,
Christian
Hellihello
Ja (ohne Fragezeichen ;-)).
Bezieht sich dann auf das aktuelle Verzeichnis, innerhalb dessen die .htaccess liegt?
Ja.
Komisch, das hatte ich gestern eingegeben im Verzeichnis httpdocs/test und wurde hochbugsiert inst httpdocs. Immerhin scheints auch ohne zu "funzen". ("Funzen" erstmal besser als "nich funzen", besser aber wäre "korrekt funktionieren" (;-)).
Jetzt dachte ich, es geht, aber der FF zeigt dann immer noch die url=kompletterSystemPfad an. Kann es sein, dass er das im Cache gebunkert hat?
301-Redirects werden gecachet (zumindest für die aktuelle Browsersitzung), 302 nicht. Falls Du beim Experimentieren mal ein R=301 drin hattest, würde das einiges erklären...
Nee, eigentlich nicht. Ich hatte nur versucht, eine Menüsteuerung bzw. Links a la example.de/info example.de/kontakt example.de/news etc zu bauen, und eben den hinteren teil an die index.php?url=news (oder was auch immer) weiterzureichen. Also recht minimalistisch.
Dank und Gruß,
Hallo Frank,
Bezieht sich dann auf das aktuelle Verzeichnis, innerhalb dessen die .htaccess liegt?
Ja.
Komisch, das hatte ich gestern eingegeben im Verzeichnis httpdocs/test und wurde hochbugsiert inst httpdocs. Immerhin scheints auch ohne zu "funzen". ("Funzen" erstmal besser als "nich funzen", besser aber wäre "korrekt funktionieren" (;-)).
Ok, vielleicht war hier auch ein Missverständnis:
RewriteBase ist notwendig, weil mod_rewrite nicht immer korrekt erraten kann, welcher Teil der URL abzuschneiden bzw. wieder anzuhängen ist auf Verzeichnisebene. Das heißt: In einem Verzeichnis, das im Web auf http://example.org/test/ gemappt wird, musst Du »RewriteBase /test« angeben, im Hauptverzeichnis (http://example.org/) »RewriteBase /«.
Ich hoffe das ganze ist jetzt etwas klarer. :-)
Viele Grüße,
Christian
Hellihello
RewriteBase ist notwendig, weil mod_rewrite nicht immer korrekt erraten kann, welcher Teil der URL abzuschneiden bzw. wieder anzuhängen ist auf Verzeichnisebene. Das heißt: In einem Verzeichnis, das im Web auf http://example.org/test/ gemappt wird, musst Du »RewriteBase /test« angeben, im Hauptverzeichnis (http://example.org/) »RewriteBase /«.
Ich hoffe das ganze ist jetzt etwas klarer. :-)
Jau, merci.
Dank und Gruß,