Объясните это правило mod_rewrite - PullRequest
2 голосов
/ 07 октября 2008

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

Ответы [ 3 ]

5 голосов
/ 07 октября 2008

Браузер отправляет запрос на сервер (Apache, так как вы используете mod_rewrite):

GET профиль / редактировать

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 работает как фронт-контроллер: он направляет все запросы в нужное место в вашем приложении.

3 голосов
/ 07 октября 2008
^ = begin of line
( = begin group
.* = any character, any number of times
) = end group

$ 1 во второй части заменяется группой в первой части.

Это правило Symfony? Идея состоит в том, чтобы передать всю строку запроса в index.php (фронт-контроллер) в качестве параметра, чтобы фронт-контроллер мог его проанализировать и направить.

2 голосов
/ 07 октября 2008

Если URL-адрес не начинается с index.php или images, или css, или js, или robots.txt, перед строкой «/index.php/» ставится префикс.

Поскольку index.php, вероятно, является исполняемым приложением php, index.php затем может прочитать оставшуюся часть URL из своей среды cgi. (хранится в $ {PATH_INFO})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...