Учитывая эти условия (я знаю то, что они означают/):
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
Что делает первое правило? К чему то, что одинокий рывок?
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
Я использовал это в течение достаточно долгого времени теперь в сочетании со Структурой Зенда, но я никогда действительно получил то, что первое правило делает точно.
Директива 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 (последнее правило, если это применить) - это флаги , что Изменить либо шаблон, замену или выполнение правила.