RewriteRule в htaccess - PullRequest
       1

RewriteRule в htaccess

4 голосов
/ 27 июня 2010

Может ли кто-нибудь объяснить следующую строку, пожалуйста?

RewriteRule ^(.*)$ /index.php/$1 [L]

Ответы [ 3 ]

7 голосов
/ 27 июня 2010

Части правила перезаписи разбиваются следующим образом:

  1. RewriteRuleУказывает, что эта строка будет правилом перезаписи, в отличие от условия перезаписи или одной из других директив механизма перезаписи

  2. ^ (. *) $Соответствует всем символам (.*) от начала ^ до конца $ запроса

  3. / index.php / $ 1Запрос будет переписан с использованием данных, сопоставленных (.*) в предыдущем примере, вместо $1.

  4. [L]Это говорит mod_rewrite, что если шаблон на шаге 2 совпадает, примените это правило как правило «Последнее» и больше не применяйте.

Документация mod_rewrite является действительно всеобъемлющим, но, по общему признанию, многое нужно сделать, чтобы декодировать такой простой пример.

Чистый эффект состоит в том, что все запросы будут маршрутизироваться через index.php, что наблюдается во многих реализациях модель-представление-контроллердля PHP.index.php может исследовать запрошенные сегменты URL (и, возможно, был ли запрос сделан с помощью GET или POST) и использовать эту информацию для динамического вызова определенного сценария, причем местоположение этого сценария не должно соответствовать структуре каталогов, подразумеваемой URI запроса.

Например, /users/john/files/index может вызвать функцию index('john') в файле с именем user_files.php, хранящемся в каталоге скриптов.Без mod_rewrite более традиционный URL, вероятно, использовал бы, возможно, менее читаемую строку запроса и вызывал файл напрямую: /user_files.php?action=index&user=john.

4 голосов
/ 27 июня 2010

Это приведет к тому, что каждый запрос будет обработан index.php, который может извлечь фактический запрос из $ _SERVER ['REQUEST_URI']

Таким образом, запрос / foo / bar будет переписан какindex.php / Foo / бар

0 голосов
/ 29 июня 2010

(я комментирую здесь, потому что у меня пока нет представителей, чтобы комментировать ответы)

Пункт № 2 в ответе Мегар мне не совсем подходит.Я мог бы быть здесь на пороге (я искал помощь во всем, что касается переписывания .htaccess ...), и я был бы рад любым разъяснениям, но это из документации Apache 2.2 on RewriteRule:

Что сопоставляется?

Первоначально шаблон будет сопоставляться с частью URL после имени хоста и порта и перед строкой запроса.Если вы хотите сопоставить имя хоста, порт или строку запроса, используйте RewriteCond с переменными% {HTTP_HOST},% {SERVER_PORT} или% {QUERY_STRING} соответственно.

Для меня этокажется, что для URL

http: // some.host.com/~user/folder/index.php?param=value

частьчто на самом деле будет соответствовать это

~ user / folder / index.php

Так что не совпадает "все символы (. *) от начала ^ доконец $ запроса ", если только" запрос "не означает, что я думал, что он делает.

...