Apache, mod_rewrite; 400 Bad Request mit PT-Flag
suit
- webserver
2 Edgar Ehritt0 suit0 Edgar Ehritt0 suit_
Hallo,
folgendes steht in einer .htaccess-Datei im Wurzelverzeichnis der Seite:
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{QUERY_STRING} !(?|&)?L= [NC]
RewriteRule ^/?$ http://example.com/index.var [L]
index.var ist eine type map und funktioniert so wie oben notiert einwandfrei.
Wenn ich jetzt [L] durch [PT] ersetze, erhalte ich 400 Bad Request - irgend ein Tipp, was ich übersehen haben könnte bzw. wo ich weitersuchen kann?
Hallo Suit,
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteCond %{HTTP_HOST} !^$
(nur am Rande, da es zum eigentlichen Problem nichts zur Sache tut, aber dennoch lustig ist) diese Angaben sind 'etwas' seltsam. Der Ausdruck !^$ schließt ^example.com$ ein. !^$ wird nur in dem Fall nicht greifen, wenn der Client dem Server keinen Host-Header sendet, was im Falle einer gewöhnlichen Anfrage an einen Server RFC-widrig wäre und seinerseits vom Server, ohne dass die Kondition greift, mit einem Status 400 beantwortet werden würde.
RewriteCond %{QUERY_STRING} !(?|&)?L= [NC]
RewriteRule ^/?$ http://example.com/index.var [L]
Diese Regel erzeugt eine _externe_ Weiterleitung.
Wenn ich jetzt [L] durch [PT] ersetze, erhalte ich 400 Bad Request - irgend ein Tipp, was ich übersehen haben könnte bzw. wo ich weitersuchen kann?
PT (passthrough) nimmt _interne_ Veränderungen an der Request-Tabelle vor und bereitet so den Request für andere Module oder CGI-Anwendungen auf. Die Beschreibung spricht hier (für die Beschreibung mod_rewrites beispielhaft typisch) schleierhaft von 'mod_alias and mod_rewrite'. In wieweit mod_negotiation befähigt ist, auf interne Änderungen des Requests überhaupt zu reagieren, also RewriteRule ^/?$ /index.var [PT]
würde genutzt werden, kann ich aus dem Stegreif nicht beantworten. Auch ist mir nicht klar, an welcher Stelle genau mit 400 geantwortet wird. Ist es bereits mod_rewrite oder mod_negotiation?
Gruß aus Berlin!
eddi
(nur am Rande, da es zum eigentlichen Problem nichts zur Sache tut, aber dennoch lustig ist) diese Angaben sind 'etwas' seltsam.
Ja, eine Leiche :) ist jetzt Ordnungsgemäß bestattet - danke für den Hinweis.
PT (passthrough) nimmt _interne_ Veränderungen an der Request-Tabelle vor und bereitet so den Request für andere Module oder CGI-Anwendungen auf.
Das wars - Danke. Scheint aber eine Konfigurationssache zu sein, ich hab' auf einem Server bei einem anderen Hoster dieselbe Zeile drinnen - grade nochmal nachgeschaut - (http://example.com/index.var) und es hat einwandfrei funktioniert.
Re:
Das wars - Danke. Scheint aber eine Konfigurationssache zu sein, ich hab' auf einem Server bei einem anderen Hoster dieselbe Zeile drinnen - grade nochmal nachgeschaut - (http://example.com/index.var) und es hat einwandfrei funktioniert.
Da würde mich interessieren, um welche Versionen des Apachen es sich handelt. Danke.
Gruß aus Berlin!
eddi
Da würde mich interessieren, um welche Versionen des Apachen es sich handelt. Danke.
Apache/2.2.3
So sieht das hier aus und von dortaus hab' ich den Schnipsel auch kopiert in das .htaccess-File des anderen Webs.
<VirtualHost xxx.xxx.xxx.xxx:80>
<Directory "/var/www/sites/example/">
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{QUERY_STRING} !(?|&)?L= [NC]
RewriteRule ^/?$ http://www.example.com/index.var [L,PT]
</Directory>
</VirtualHost>
Ob da L oder L,PT steht macht übrigens keine Unterschied - funktioniert beides.