Что означает %{REQUEST_FILENAME}.ext? Почему дополнительное окончание.ext?

%{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]
1
задан 27 November 2021 в 11:25
1 ответ

Разве .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, то условие не выполняется и перезапись не происходит (, что правильно).

Однако это правило не является строго правильным и может вызвать цикл перезаписи-при определенных условиях. См. следующий связанный вопрос:

1
ответ дан 27 November 2021 в 14:47

Теги

Похожие вопросы