Подтвердить что ты не робот

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

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

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

Что делает правило first? Для чего это одинокая тире?

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

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

4b9b3361

Ответ 1

Директива RewriteCond описывает только дополнительное условие для RewriteRule. Поэтому RewriteCond всегда должен быть связан с RewriteRule.

В вашем случае три 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 (последнее правило, если применяется) flags, которые изменяют либо шаблона, замены или выполнения правила.