2009-08-27 10 views
1

J'ai récemment découvert la puissance du module mod_rewrite et j'ai besoin d'aide.mod_rewrite: réglage GET en fonction de HTTP_HOST

que j'ai un site Web qui a deux noms de domaine mapping vers le même hôte ...

example.com 
example.net 

Et je voudrais définir une var GET en fonction du HTTP_HOST du (c.-à-.com ou .net ?) ...

/index.php?lang=en 
/index.php?lang=es 

Cependant, la mise en garde est-ce .. J'ai déjà 3 RewriteRules ...

RewriteRule ^(about|contact)/?$ /index.php?page=$1 [NC] 
... 
.. 

Et si je devaient suivre l'exemple sur here (bas de RewriteCond) Je devrais copier les 3 RewriteRules pour chaque HTTP_HOST (c.-à-d. .com ou .net) et ajouter la variable GET statiquement comme; & lang = fr OU & lang = es et la fin de chaque règle ...

Est-il possible de le faire automatiquement, sans avoir à copier les 3 règles tout recommencer qui ne diffèrent que par un seul get var au fin?

PS. Je sais que cela peut être fait à travers le langage de script, mais je me demandais si cela pouvait se faire via mod_rewrite, et comment.

merci!

Répondre

2

Essayez de mettre quelque chose comme ça avant que tous vos autres règles:

RewriteCond %{HTTP_HOST} .com$ 
RewriteRule ^(.*)$ $1?lang=en [QSA] 
RewriteCond %{HTTP_HOST} .net$ 
RewriteRule ^(.*)$ $1?lang=es [QSA] 

Bien que vous pourriez être mieux d'utiliser une variable d'environnement pour spécifier la langue, en utilisant la directive SetEnv avec une langue différente dans chaque hôte virtuel.

Ou peut-être encore mieux, regardez dans mod_negotiation, qui contient des fonctionnalités standard pour gérer les langues.

+0

Je vais vérifier que le drapeau QSA .. semble prometteur. –

+0

Alors que le code submtité a été d'une grande aide, il est inutile en soi. Il vous restera une récursion infinie, puisque apache continuera à rediriger chaque page vers? Lang = en | es même si cela a déjà été défini. Donc ajoutez la ligne suivante avant: RewriteCond% {QUERY_STRING}! (Lang = (en | es)) cela ne redirigera pas vers? lang = en | es s'il a déjà été défini;) –

+0

Il ne devrait pas y avoir de récursion infinie à moins que vous ne redémarriez le processus de réécriture de règles plus tard. D'après votre question, je croyais que vous ne faisiez pas cela. –

Questions connexes