fragen stichworte

Apache mod_rewrite aktiviert, funktioniert aber nicht

Kämpfen am zweiten Tag gegen Probleme mit mod_rewrite.

Systembetriebssystem: Windows XP HTTP-Server: Apache 2.2 httpd

Koppeln Sie verwandte Zeilen von httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
DocumentRoot "N:/Web-dev/www"

<Directory "/">
     Options Indexes +FollowSymLinks MultiViews
     AllowOverride All
     Order allow,deny
     Allow from all
</Directory>

<Directory "N:/Web-dev/www">
    Options Indexes +FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

.htaccess enthält:

RewriteEngine on
RewriteRule ^alice.html$ bob.html

PHP-Info sagt

Loaded Modules  core mod_win32 mpm_winnt http_core mod_so mod_actions mod_alias mod_asis mod_auth_basic mod_authn_default mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_setenvif mod_rewrite mod_proxy mod_php5 

Beide Dateien sind vorhanden, laden alice.html und lädt sie immer noch. In rewrite.log wird Folgendes angezeigt:

127.0.0.1 - - [25/Apr/2011:11:01:27 +0300] [localhost/sid#7b5148][rid#2bc70b0/initial] (1) [perdir N:/Web-dev/www/] pass through N:/Web-dev/www/alice.html

Ich habe versucht zu testen, ob es die .htaccess-Datei liest, indem ich ein Jibberish hinzugefügt habe, um den Engine-Befehl neu zu schreiben, und es hat sich bewährt:

[Mon Apr 25 10:47:04 2011] [alert] [client 127.0.0.1] N:/Web-dev/www/.htaccess: Invalid command 'ReDELETEMEwriteEngine', perhaps misspelled or defined by a module not included in the server configuration

Wenn Sie dasselbe für RewriteRule machen, ändert sich nichts, als würde dies ignoriert. Ich habe mehr getestet - DELETEME vor dem Befehl RewriteEngine hinzugefügt - es schlägt fehl mit Fehler, wenn ich danach etwas hinzufüge, ignoriert es es, als ob es keine Fehler geben würde!

Ich habe keine Optionen, was zu tun ist !?

Zugehörige Frage

antworten

Bei weiteren Tests bekomme ich merkwürdige Ergebnisse - vor dem RewriteEngine-Befehl wurde DELETEME hinzugefügt - es schlägt fehl, wenn ich nachträglich etwas hinzufüge, ignoriert es es, als ob es keine Fehler geben würde!

Dann erinnere ich mich an meine Erfahrung mit Regex und Textanalyse. Ich fragte mich, ob die Manipulation von CRLF etwas Gutes bewirken würde, und enthüllte, welche neuen Liniensymbole in der aktuellen Datei vorhanden sind. Wie ich weiß, ist Apache eine auf Unix basierende Software, dachte ich, diese könnte missverstanden werden, also habe ich sie in LF konvertiert und das war es, alles hat danach funktioniert!

Hinweis für die Zukunft - Stellen Sie mit Ihrem Editor (EditPlus, Notepad ++ usw.) sicher, dass Ihre neuen .htaccess-Zeilensymbole multiplatform-kompatibel (CRLF) oder zumindest Unix-kompatibel (LF) sind, wenn Sie mit Apache arbeiten!

PS: Entschuldigung für die Veröffentlichung (hier und Stackoverflow).

Da Sie in Ihrem Muster explizit auf Zeilenanfang (^) und Zeilenende ($) verweisen, müssen Sie möglicherweise einfach eine / in Ihrer Umschreibungsregel hinzufügen, um der Anforderung zu entsprechen.

RewriteRule ^/alice.html$ bob.html
#            ^ this one

Wenn Sie http://localhost/alice.html anfordern, wird ein Header mit dem Anforderungspfad "/alice.html" gesendet, damit Ihr Muster sonst nicht übereinstimmt.