mod-rewrite
Контексты правил перезаписи
Поиск…
замечания
В этом разделе описываются два контекста, в которых может использоваться RewriteRule
. В примерах, исключающих RewriteEngine on
, предполагается, что эта директива произошла до этого примера.
Переписать правила в контексте для каждого каталога
Контекст для каждого каталога является частью статического файла конфигурации между тегами <Directory>
и </Directory>
. Все содержимое файлов динамической конфигурации находится внутри контекста для каждой папки, в которой находится .htaccess.
RewriteRule
в контексте каждого каталога сопоставляется с частью URL-адреса после протокола, имени хоста, порта и префикса каталога, в котором они находятся, и перед строкой запроса.
В статическом файле конфигурации
Когда на URL http://example.com/foo?id=1
используется следующее правило, регулярное выражение в первом аргументе RewriteRule
сопоставляется с foo
. Протокол ( http
), hostname ( example.com
) и префикс для этого каталога ( /
) удаляются. На другом конце строка запроса ( ?id=1
) также удаляется.
<Directory "/">
RewriteRule ^foo$ bar [L]
</Directory>
В следующем примере, используя URL http://example.com/topic/15-my-topic-name
, первый аргумент RewriteRule
будет сопоставлен с topic/15-my-topic-name
:
<Directory "/topic/">
RewriteRule ^topic/([0-9]+)-[^/]*/?$ topics.php?id=$1 [L]
</Directory>
В файле динамической конфигурации
Когда следующее правило помещается в файл .htaccess
который находится в папке www-root, а затем используется на url http://example.com/foo?id=1
, первое регулярное выражение сопоставляется с foo
.
RewriteRule ^foo$ bar [L]
В контексте для каждого каталога совпадающий URL никогда не начинается с
/
. В таком контексте директива, начинающаяся сRewriteRule ^/
, никогда не будет соответствовать чему-либо.
Переписать правила в контексте виртуального хоста
Контекст виртуального хоста является частью статического файла конфигурации между тегами <VirtualHost>
и </VirtualHost>
.
RewriteRule
в контексте виртуального хоста сопоставляется с частью URL-адреса после протокола, имени хоста и порта и перед строкой запроса.
Когда для URL-адреса http://example.com/foo?id=1
используется следующее правило, регулярное выражение в первом аргументе RewriteRule
сопоставляется с /foo
.
<VirtualHost 1.2.3.4:80>
ServerName example.com
RewriteEngine on
RewriteRule ^/foo$ /bar [L]
</VirtualHost>