Я заметил, что есть несколько распространенных способов настройки RewriteRule
s для PHP-приложений на основе MVC. Большинство из которых содержат:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
Далее следует RewriteRule:
RewriteRule ^(.*)$ /index.php?$1 [L,QSA]
или
RewriteRule .* /index.php/$0 [PT,L]
Я понимаю, что L = LAST, QSA = строка запроса добавлена, PT = пройдена, но, поскольку у меня пока нет реального опыта их использования, может кто-нибудь сообщить мне, с какими флагами и URI они пойдут и почему
Последнее правило содержит косую черту перед $ 0, я предполагаю, потому что это заставляет его так, что переменная PATH CGI заполняется, как часто я не вижу, чтобы она заполнялась. Действительно ли PT
служит той же цели, что и QSA
, косвенно? Или как еще можно использовать строки запроса? Каковы их плюсы и минусы?
И просто для подтверждения, если я хочу добавить, скажем, директиву ErrorDocument
, будет ли иметь значение флаг L
? Допустим, сделан запрос на '/ non -isting-link /', мое приложение не может забрать его из определенных маршрутов, которые у меня есть, и при этом не существует существующего каталога как такового, L
не имел бы никакого эффекта, если бы я разместил ErrorDocument
ниже RewriteRule? Должен ли я поместить его перед всем фрагментом? То же самое с 301, 302. И если бы я на самом деле вручную вызывал коды 3xx / 4xx, я бы использовал в своем приложении функцию header()
, верно? У меня такое чувство, что это довольно грязно, но, вероятно, это самый практичный и единственный способ сделать это, поэтому, вероятно, это не грязно.