mod_rewrite оценивает {REQUEST_FILENAME} после каждого правила перезаписи? - PullRequest
1 голос
/ 13 октября 2011

Вот случай:

RewriteEngine On
RewriteBase /app/webroot/

RewriteRule ^(.*)$ $1 [QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Использует ли RewriteConds для второго правила результат первого RewriteRule?

Например, если я запрашиваю /onestaticfile.txt и этот файлна самом деле существует в / app / webroot, как быть уверенным, что окончательный URL будет /app/webroot/onestaticfile.txt вместо /app/webroot/index.php?url=onestaticfile.txt?

1 Ответ

1 голос
/ 26 октября 2011

Например, если я запрашиваю /onestaticfile.txt, и этот файл действительно существует в / app / webroot, как быть уверенным, что окончательный URL будет /app/webroot/onestaticfile.txt вместо /app/webroot/index.php?url=onestaticfile.txt?

RewriteConds для второго правила будут оценены.Но поскольку onestaticfile.txt существует, он не пройдёт тест! -F, и второе правило не будет применено (поэтому окончательный URL будет: /app/webroot/onestaticfile.txt).Аналогичным образом, если onestaticfile.txt не существует, будет применено 2-е правило.

В любом случае, когда применяется правило, происходит внутреннее перенаправление, и все это происходит снова с переписанным URI.Но второй раз не меняет базовый URI (без строк запроса), поэтому во второй раз ничего не происходит.

Если бы в квадратных скобках вашего первого правила был символ L, второе правилоникогда не применяется, потому что переписывание всегда заканчивается первым правилом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...