mod-rewrite
Kontekst reguł przepisywania
Szukaj…
Uwagi
W tym temacie opisano dwa konteksty, w których można użyć RewriteRule
. W przykładach z pominięciem RewriteEngine on
zakłada RewriteEngine on
, że ta dyrektywa wystąpiła przed tym przykładem.
Przepisz reguły w kontekście poszczególnych katalogów
Kontekst dla katalogu jest częścią statycznego pliku konfiguracyjnego między <Directory>
i </Directory>
. Cała zawartość dynamicznych plików konfiguracyjnych znajduje się w kontekście katalogu, w którym znajduje się folder .htaccess.
RewriteRule
w kontekście dla poszczególnych katalogów pasują do części adresu URL po protokole, nazwie hosta, porcie i prefiksie katalogu, w którym się znajdują, i przed ciągiem zapytania.
W statycznym pliku konfiguracyjnym
Gdy w adresie URL http://example.com/foo?id=1
zostanie użyta następująca reguła, wyrażenie regularne w pierwszym argumencie RewriteRule
jest dopasowywane do foo
. Protokół ( http
), nazwa hosta ( example.com
) i prefiks tego katalogu ( /
) są usuwane. Na drugim końcu ciąg zapytania ( ?id=1
) jest również usuwany.
<Directory "/">
RewriteRule ^foo$ bar [L]
</Directory>
W poniższym przykładzie, używając adresu URL http://example.com/topic/15-my-topic-name
, pierwszy argument RewriteRule
zostałby dopasowany do topic/15-my-topic-name
:
<Directory "/topic/">
RewriteRule ^topic/([0-9]+)-[^/]*/?$ topics.php?id=$1 [L]
</Directory>
W dynamicznym pliku konfiguracyjnym
Gdy poniższa reguła zostanie umieszczona w pliku .htaccess
, który znajduje się w folderze głównym katalogu www, a następnie zostanie użyta w adresie URL http://example.com/foo?id=1
, pierwsze wyrażenie regularne zostanie dopasowane do foo
.
RewriteRule ^foo$ bar [L]
W kontekście poszczególnych katalogów dopasowany adres URL nigdy nie zaczyna się od znaku
/
. W takim kontekście dyrektywa zaczynająca się odRewriteRule ^/
nigdy niczego nie dopasuje.
Przepisz reguły w kontekście wirtualnego hosta
Kontekst hosta wirtualnego jest częścią statycznego pliku konfiguracyjnego między <VirtualHost>
i </VirtualHost>
.
RewriteRule
w kontekście wirtualnego hosta są zgodne z częścią adresu URL po protokole, nazwie hosta i porcie oraz przed ciągiem zapytania.
Gdy dla adresu URL http://example.com/foo?id=1
zostanie użyta następująca reguła, wyrażenie regularne w pierwszym argumencie RewriteRule
jest dopasowywane do /foo
.
<VirtualHost 1.2.3.4:80>
ServerName example.com
RewriteEngine on
RewriteRule ^/foo$ /bar [L]
</VirtualHost>