mod-rewrite
Contesti delle regole di riscrittura
Ricerca…
Osservazioni
Questo argomento descrive i due contesti in cui è possibile utilizzare RewriteRule
. Negli esempi che omettono RewriteEngine on
, si presume che questa direttiva si sia verificata prima di quell'esempio.
Riscrivi regole in contesto per directory
Il contesto per-directory fa parte del file di configurazione statico tra i <Directory>
e </Directory>
. L'intero contenuto dei file di configurazione dinamici si trova all'interno del contesto per directory della cartella in cui risiede il file .htaccess.
RewriteRule
contesto di RewriteRule
in per-directory coincide con la parte di un url dopo il protocollo, il nome host, la porta e il prefisso della directory in cui risiedono e prima della stringa di query.
Nel file di configurazione statico
Quando viene utilizzata la seguente regola nell'URL http://example.com/foo?id=1
, la regex nel primo argomento di RewriteRule
viene confrontata con foo
. Il protocollo ( http
), nomehost ( example.com
) e il prefisso per questa directory ( /
) vengono rimossi. All'altra estremità, viene rimossa anche la stringa di query ( ?id=1
).
<Directory "/">
RewriteRule ^foo$ bar [L]
</Directory>
Nell'esempio seguente, utilizzando l'url http://example.com/topic/15-my-topic-name
, il primo argomento di RewriteRule
verrà confrontato con topic/15-my-topic-name
:
<Directory "/topic/">
RewriteRule ^topic/([0-9]+)-[^/]*/?$ topics.php?id=$1 [L]
</Directory>
Nel file di configurazione dinamico
Quando la seguente regola viene inserita in un file .htaccess
che si trova nella cartella www-root e quindi utilizzata nell'URL http://example.com/foo?id=1
, la prima espressione regolare viene confrontata con foo
.
RewriteRule ^foo$ bar [L]
In contesto per-directory, l'url corrispondente non inizia mai con un
/
. In tale contesto, una direttiva che inizia conRewriteRule ^/
non corrisponderà mai a nulla.
Riscrivi le regole nel contesto dell'host virtuale
Il contesto dell'host virtuale fa parte del file di configurazione statico tra i <VirtualHost>
e </VirtualHost>
.
RewriteRule
nel contesto dell'host virtuale corrisponde alla parte di un URL dopo il protocollo, il nome host e la porta e prima della stringa di query.
Quando viene utilizzata la seguente regola per l'URL http://example.com/foo?id=1
, la regex nel primo argomento di RewriteRule
viene confrontata con /foo
.
<VirtualHost 1.2.3.4:80>
ServerName example.com
RewriteEngine on
RewriteRule ^/foo$ /bar [L]
</VirtualHost>