%{REQUEST_FILENAME}
не содержит такую строку:
/web/webroot/index.php
Я вижу, что многие люди рекомендуют проверить, существует ли файл и имеет ли он такое расширение.php:
RewriteCond %{REQUEST_FILENAME}.php -f
Разве это не .php
после %{REQUEST_FILENAME}
лишний? Переменная уже должна содержать .php
, верно?
Похоже, добавление .php
после %{REQUEST_FILENAME}
приведет к тому, что проверка TestString добавит дополнительный.php, вот так:
/web/webroot/index.php.php
Я упускаю что-то простое, я уверен в этом, но я просто не знаю что это.
Контекст следующий:
RewriteCond %{THE_REQUEST} ^.*?\.php [NC]
RewriteRule ^ - [R=404,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Разве
.php
после%{REQUEST_FILENAME}
не является излишним? Переменная уже должна содержать.php
, верно?
Ну, да и нет, это зависит от того, что вы пытаетесь сделать.
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Это правило позволяет запрашивать URL-адреса без расширений. например. /index
или /foo
, и это внутренне переписывает запрос на /index.php
и /foo.php
соответственно.
В данном случае REQUEST_FILENAME
— это строка вида /web/webroot/index
. Таким образом, это тестирование того, что /web/webroot/index.php
существует, прежде чем переписывать его. Если бы вы запросили /index.php
, то условие не выполняется и перезапись не происходит (, что правильно).
Однако это правило не является строго правильным и может вызвать цикл перезаписи-при определенных условиях. См. следующий связанный вопрос: