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>