Интерпретация построчно:
RewriteRule .* index.php [L]
Сначала будет интерпретироваться и соответствовать каждому запросу (сопоставляется с частью URL после имени хоста и порта и перед строкой запроса)..*
- это регулярное выражение, которое всегда соответствует.Лучшее и более быстрое правило может быть таким:
RewriteRule ^ index.php [L]
^
в выражении регулярного выражения, соответствует каждой строке, которая имеет начало.Это равно .*
-> совпадать с каждой вещью.
После того, как совпадение было найдено, обработка продолжится с RewriteCond
(itions).Два RewriteCondition связаны невидимой логикой AND
.Этот блок будет совпадать, только если оба RewriteConditions имеют значение true.
RewriteCond %{REQUEST_FILENAME} !-f # Check if given file is not a file AND
RewriteCond %{REQUEST_FILENAME} !-d # Check if given directory is not a file and
Пример. Если на сервере будет установлена следующая файловая структура.
.
|-- css
| `-- base.css
|-- img
| `-- logo.png
`-- index.php
Если вы запрашиваете пример URL.com / css / base.css произойдут следующие шаги.
- Соответствует RewriteRule (соответствует все время)
- Не будет соответствовать
RewriteCond %{REQUEST_FILENAME} !-f
, поскольку css/base.css
- это файл. RewriteRule
будет пропущен из-за отсутствия совпадений, при обработке будут проверены другие правила и условия *
Если вы запросите пример URL.com / ru / about произойдут следующие шаги:
- Соответствует
RewriteRule
(соответствует постоянно) - Соответствует
RewriteCond %{REQUEST_FILENAME} !-f
, потому чтоen/about
- это не файл. - Совпадение
RewriteCond %{REQUEST_FILENAME} !-d
, поскольку en/about
- это не каталог. - Комбинация
RewriteRule
и RewriteCond
создала положительное совпадение -> - Перенаправить запрос на
index.php
с флагом L
Флаг L
означает последнее правило , которое остановит обработку,Подробнее о flags .
Эта комбинация правил часто используется для перенаправления всех запросов в одну точку входа веб-приложения.Чтобы не обслуживать статический контент index.php
, файлы и каталоги будут обслуживаться веб-сервером, а не index.php.Диспетчеризация динамического запроса сайта будет выполняться в логике index.php
.
*. Правильный поток данных можно найти здесь