Сколько раз анализируется .htaccess и выполняются директивы RewriteRule? - PullRequest
3 голосов
/ 15 сентября 2011

Это тривиальный вопрос, но я хотел еще раз проверить.

Сколько раз будет проходить следующее .htaccess?

RewriteRule ^.*$ bla [L]
RewriteRule bla foo [L]

[L], как я понимаю, останавливаетсявыполнение RewriteRule для остальной части файла, но потом он начинается заново?

Это может показаться глупым вопросом, поэтому я заранее извиняюсь, но из-за моего очень ограниченного опыта написанияRewriteRule У меня возникло ощущение, что файл .htaccess иногда анализируется более одного раза.

1 Ответ

3 голосов
/ 15 сентября 2011

Да, флаги L не работают так, как вы думаете, в этом примере. Поскольку файл .htaccess находится в контексте «на каталог», mod_rewrite создает процесс подзапроса. Этот процесс будет хранить правила обработки до тех пор, пока он не сможет больше обрабатываться или не прервется, как в вашем примере с флагом L.

Однако, поскольку перезапись была инициирована с помощью правила # 1, механизм перезаписи создаст новый подзапрос и снова пройдет правила .htaccess. Он повторяет этот процесс до тех пор, пока происходит перезапись, и выполняет обработку только тогда, когда перезаписей нет.

В вашем примере флаги L не только не делают то, что вы есть, они на самом деле делают вещи медленнее, требуя от apache создавать несколько подзапросов, вместо того, чтобы использовать один подзапрос, который обрабатывает оба правила и затем завершается.

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