
Das %{REQUEST_FILENAME}
enthält eine Zeichenfolge wie diese:
/web/webroot/index.php
Ich sehe, dass viele Leute empfehlen, zu testen, ob eine Datei existiert und die Erweiterung .php wie folgt hat:
RewriteCond %{REQUEST_FILENAME}.php -f
Ist das .php
„nach“ nicht %{REQUEST_FILENAME}
überflüssig? Die Variable sollte doch bereits das enthalten .php
, oder?
Das Hinzufügen von .php
„after“ %{REQUEST_FILENAME}
scheint dazu zu führen, dass die TestString-Prüfung eine zusätzliche .php hinzufügt, etwa so:
/web/webroot/index.php.php
Ich übersehe etwas Einfaches, da bin ich mir sicher, aber ich weiß einfach nicht, was es ist.
Der Kontext ist dieser:
RewriteCond %{THE_REQUEST} ^.*?\.php [NC]
RewriteRule ^ - [R=404,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Antwort1
Ist das
.php
„nach“ nicht%{REQUEST_FILENAME}
überflüssig? Die Variable sollte doch bereits das enthalten.php
, oder?
Nun, ja und nein, es hängt davon ab, was Sie versuchen zu tun.
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Mit dieser Regel können Sie URLs ohne Erweiterung anfordern, z. B. „ /index
oder“ /foo
, wodurch die Anforderung intern in „ /index.php
und“ umgeschrieben wird /foo.php
.
In diesem Fall REQUEST_FILENAME
ist eine Zeichenfolge der Form /web/webroot/index
. Es wird also getestet, ob sie /web/webroot/index.php
existiert, bevor sie in dieselbe umgeschrieben wird. Wenn Sie /index.php
dann dieZustandschlägt fehl und es erfolgt kein Neuschreiben (was richtig ist).
Diese Regel ist jedoch nicht ganz korrekt und kann unter bestimmten Umständen zu einer Umschreibschleife führen. Siehe die folgende verwandte Frage: