2011-01-17 18 views
1

Ich möchte alle eingehenden Anfragen über ein einziges Skript (index.php in Web-Root) verarbeiten.Apache und Backslashes in mod_rewrite

So ist die folgende, was zur Zeit passiert: http://localhost/foo/bar/baz

wird von Apache (durch .htaccess) geleitet: http://localhost/index.php?url=foo/bar/baz


Diese gut funktioniert, aber in Firefox Ich bin in der Lage, dies zu tun : http://localhost/foo\ -> beachten Sie die Backslash.

Und Apache, anstatt das zu tun: /index.php?url=foo\

Strahlt eine generische Fehlerseite Spruch:

Objekt wurde nicht gefunden! Die angeforderte URL wurde auf diesem Server nicht gefunden. Wenn Sie die URL manuell eingeben, überprüfen Sie bitte Ihre Schreibweise und versuchen Sie es erneut.

Wenn Sie denken, dass dies ein Serverfehler ist, wenden Sie sich bitte an den Webmaster unter .

Error 404 localhost Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 Mod_perl/2.0 .4 Perl/v5.10.1

Direkt zu gehen: http://localhost/index.php?url=foo\ funktioniert jedoch ohne Probleme.


Alle Websites, die ich im Internet gesehen habe, scheinen in der Lage zu sein, Schrägstriche anmutig zu behandeln (zum Beispiel http://stackoverflow.com/tags/php\\\\\).

Ich halte dieses Verhalten für einen Fehler und ich möchte Apache zwingen, Backslashes korrekt weiterzuleiten. Hier ist meine .htaccess Datei in seiner Gesamtheit:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [L] 

Wie kann ich diese Arbeit richtig zu machen?


Edit: Ich habe gerade versucht, dies auf meinem Webhost und das wird richtig von ihnen behandelt. Lässt mich denken, dass es eine Einstellung in httpd.conf ist.

+0

Mögliche Bug: https://issues.apache.org/bugzilla/show_bug.cgi?id=42499, auch versuchen, zu Ihrem htaccess 'AllowEncodedSlashes On' – RobertPitt

+0

@RobertPitt: danke, ich wusste nicht über' AllowEncodedSlashes '. Beim Hinzufügen zu meiner '.htaccess' Datei, die Server-ISEs (HTTP 500), obwohl. Dies geschieht sowohl auf meiner lokalen Entwicklungsumgebung (Windows) als auch auf meinem Webhost (Linux). Wenn man sich die Apache-Dokumentation anschaut, sieht es so aus, als wäre ihr Kontext aufgeführt als: 'Server-Konfiguration, virtueller Host', also keine Unterstützung für' .htaccess'? – NuCalTone

Antwort

0

Wahrscheinlich muss AcceptPathInfo deaktiviert sein, damit diese nicht als Schrägstriche interpretiert werden.

0

Ich hatte gerade dieses Problem auf WampServer unter Windows. This page hatten die Lösung - die AllowEncodedSlashes Option, die RobertPitt oben erwähnt ist die richtige, aber es muss in der http.conf Datei, in einem Virtualhost-Block gehen, zum Beispiel:

<VirtualHost *:80> 
    AllowEncodedSlashes On 
</VirtualHost> 

Es ist nicht in einer .htaccess Datei funktioniert.

Verwandte Themen