Объясните это правило mod_rewrite
-
05-07-2019 - |
Вопрос
Кто-нибудь может объяснить, что делает это правило mod_rewrite?
Я пытаюсь комментировать файл, но код, кажется, утверждает противоположное тому, что я думаю, что он делает
# Enable rewriting of URLs
RewriteEngine on
# Allow specified file types to be accessed
# Thing to test = URL
# Condition = not starting with
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
# RewriteRule will only be performed if the preceeding RewriteCond is fulfilled
# Remove index.php from all URLs
# Pattern = anything (0 or more of any character)
# Substitution = index.php + the rest of the URL
RewriteRule ^(.*)$ /index.php/$1 [L]
Решение
^ = begin of line
( = begin group
.* = any character, any number of times
) = end group
$ 1 во второй части заменяется группой в первой части.
Это правило Symfony? Идея состоит в том, чтобы передать всю строку запроса в index.php (фронт-контроллер) в качестве параметра, чтобы фронт-контроллер мог его проанализировать и направить.
Другие советы
Браузер отправляет запрос на сервер (Apache, так как вы используете mod_rewrite):
ПОЛУЧИТЬ профиль / изменить
Apache принимает этот запрос и видит в своих файлах конфигурации, что вы настроили его для передачи всех запросов через mod_rewrite. Таким образом, он отправляет строку 'profile / edit' в mod_rewrite. Затем Mod_rewrite применяет указанные вами правила, которые затем преобразуют запрос (как я объяснил в моем предыдущем посте) в «index.php / profile / edit». После того как mod_rewrite завершен, Apache продолжает обрабатывать запрос и видит «о, этот парень запрашивает файл index.php». Поэтому он вызывает интерпретатор php, который затем анализирует и выполняет index.php - и получает в качестве аргументов «/ profile / edit». Код php (CI в вашем случае) анализирует эти аргументы и знает, как вызвать нужный модуль в вашем приложении.
Так что, по сути, это способ всегда вызывать index.php, даже если в URL-адресе не указан index.php. Таким образом, index.php работает как фронт-контроллер: он направляет все запросы в нужное место в вашем приложении.
Если URL-адрес не начинается с index.php или images, css, js или robots.txt, строка " /index.php/" с префиксом.
Поскольку index.php, вероятно, является исполняемым приложением php, index.php может прочитать оставшуюся часть URL из своей среды cgi. (хранится в $ {PATH_INFO})