mod_rewrite: что делает этот RewriteRule?

Учитывая эти условия (я знаю то, что они означают/):

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d 

Что делает первое правило? К чему то, что одинокий рывок?

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

Я использовал это в течение достаточно долгого времени теперь в сочетании со Структурой Зенда, но я никогда действительно получил то, что первое правило делает точно.

27
задан Decent Dabbler 20 January 2010 в 14:45
поделиться

1 ответ

Директива Rewritecond только что описывает дополнительное условие для директивы Rewritierule . Таким образом, Rewritecond всегда должен быть связан с реграмме .

В вашем случае три Rewritecond , вероятно, принадлежат к первому Rewriterule , как это:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

Теперь это правило применяется, если шаблон Rewriterule Соответствует текущему URL-адресу запроса (путь для каждого каталога, раздетый ранее) и , если условие выполнено.

В этом случае условие верно только в том случае, если при сопоставлении URL-адреса запроса к файловой системе он совпадает с существующим файлом с размером файла более 0 ( -S ) или символической ссылкой ( -L ) или каталог ( -D ). Таким образом, ваше правило будет применено для любого URL ( ^. * $ совпадает с чем-либо), что можно сопоставить с чем-то существующим в вашей файловой системе. Подстановка - просто значит не менять ничего. И NC ( ( ( нет случая , нечувствителен к регистру, бесполезно в этом контексте) и l (последнее правило, если это применить) - это флаги , что Изменить либо шаблон, замену или выполнение правила.

51
ответ дан 28 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

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