2010-09-02 6 views
4

je besoin de quelque chose comme ceci:Utilisation de variables d'environnement personnalisé dans .htaccess

SetEnv foo bar.baz 
RewriteEngine On 

RewriteCond %{HTTP_HOST} ^%{foo}$ 
RewriteRule ^(.*)$ http://www.foo/$1 [L] 

UPD:

J'ai fait comme suit:

SetEnv HOSTNAME_ENV testsite 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^%{ENV:HOSTNAME_ENV} 
RewriteRule ^(.*)$ http://www.%{ENV:HOSTNAME_ENV}/$1 [L,R=301] 

Mais cela ne fonctionne pas . % {ENV: HOSTNAME_ENV} n'est pas défini.

Répondre

4

Cela ne fonctionnera pas, car mod_rewrite ne développe pas les variables dans les modèles de test. Par conséquent, votre expression essayera de faire correspondre l'expression régulière ^%{foo}$, pas ^value_of_foo$.

En outre, la documentation pour SetEnv fait également une note spéciale sur l'ordre de traitement en relation avec mod_rewrite. Cela entre en jeu ici, malgré les règles appliquées plus tard dans la gestion des requêtes que dans le scénario qu'ils décrivent ici. Si vous n'effectuez pas une réécriture qui provoque une redirection interne avant de tester la variable d'environnement que vous avez définie, elle sera vide.

En supposant que vous définissez correctement la variable, une solution de contournement potentiel est de ce faire, bien que je me sens comme il n'est pas à toute épreuve:

RewriteCond %{HTTP_HOST}#%{ENV:foo} ^([^#]+)#\1$ 
1

Il suffit de définir l'environnement en utilisant des règles de réécriture:

RewriteRule (.*) $1 [E=HOSTNAME_ENV:whatever.com] 

Cela a également l'avantage de pouvoir utiliser RewriteCond.

Questions connexes