Ich habe ein Problem mit einem Dateitestvorgang in einem mod_rewrite RewriteCond-Eintrag, der prüft, ob er %{REQUEST_FILENAME}
vorhanden ist. Es scheint, dass %{REQUEST_FILENAME}
ich keinen absoluten Pfad habe, sondern einen Pfad, der auf dem verwurzelt ist DocumentRoot
.
Aufbau
Ich habe dies in einem <VirtualHost>
Block in meiner Apache 2.2.9-Konfiguration:
RewriteEngine on
RewriteLog /tmp/rewrite.log
RewriteLogLevel 5
#push virtually everything through our dispatcher script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([^/]*)/?([^/]*) /dispatch.php?_c=$1&_m=$2 [qsa,L]
Diagnose versucht
Diese Regel ist häufig genug, um Anforderungen für nicht vorhandene Dateien oder Verzeichnisse über ein Skript weiterzuleiten. Das Problem ist, es Brennen , selbst wenn eine Datei tut exist.
Wenn ich die Regel entferne, kann ich normale Dateien problemlos anfordern. Mit der geltenden Regel werden diese Anforderungen jedoch an dispatch.php weitergeleitet
Protokollablaufverfolgung neu schreiben
Folgendes sehe ich im rewrite.log
init rewrite engine with requested uri /test.txt
applying pattern '^/([^/]*)/?([^/]*)' to uri '/test.txt'
RewriteCond: input='/test.txt' pattern='!-f' => matched
RewriteCond: input='/test.txt' pattern='!-d' => matched
rewrite '/test.txt' -> '/dispatch.php?_c=test.txt&_m='
split uri=/dispatch.php?_c=test.txt&_m= -> uri=/dispatch.php, args=_c=test.txt&_m=
local path result: /dispatch.php
prefixed with document_root to /path/to/my/public_html/dispatch.php
go-ahead with /path/to/my/public_html/dispatch.php [OK]
Für mich sieht es so aus, als würde REQUEST_FILENAME als Pfad vom Dokumentstamm und nicht vom Dateisystemstamm dargestellt, was vermutlich der Grund dafür ist, dass der Dateitestoperator fehlschlägt.
Alle Hinweise zur Lösung dieses dankbar erhaltenen ...