Вопрос

Кто-нибудь может объяснить, что делает это правило 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})

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top