2009-07-27 1 views
0

Fondamentalement, ce que je veux faire est de réécrire toutes les URL parce que nous avons beaucoup de langues différentes. Nous avons un serveur qui héberge plusieurs domaines. Nous avons www.example.com, www.example.fr, www.example.de, www.anotherdomain.com, www.anotherdomain.de. Ce que je veux faire est de rediriger toutes les demandes de example.xxx vers www.example.com avec le paramètre url supplémentaire lang = en. Cela ne devrait pas affecter d'autres domaines tels que www.anotherexample.com etc.Comment réécrire l'URL basée sur le domaine dans Apache et ajouter un paramètre supplémentaire?

Cela ne fonctionne pas:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.de$ 
RewriteRule ^(.*)$ http://www.example.com/$1?lang=de [PT] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.fr$ 
RewriteRule ^(.*)$ http://www.example.com/$1?lang=fr [PT] 

Une chose qui rend encore plus difficile est que le ServerName est totalement différent du nom d'hôte, Il s'appelle prod.migr.com.

Toutes les suggestions seraient appréciées.

Répondre

0

Essayez ceci:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.de$ 
RewriteRule^http://www.example.com%{REQUEST_URI}?lang=de [L,R=301,QSA] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.fr$ 
RewriteRule^http://www.example.com%{REQUEST_URI}?lang=fr [L,R=301,QSA] 
0

Le drapeau PT est très probablement votre problème. Je ne l'ai jamais vu utilisé lorsque la cible est une adresse de domaine complète car il est destiné à être redirigé vers les URI avec mod_alias. Le drapeau que vous devriez utiliser est le drapeau QSA dans le cas où la page que l'utilisateur visite a une chaîne de requête.

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.de$ 
RewriteRule ^(.*)$ http://www.example.com/$1?lang=de [QSA] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.fr$ 
RewriteRule ^(.*)$ http://www.example.com/$1?lang=fr [QSA] 

Cependant, une solution beaucoup mieux serait de vérifier l'hôte que l'utilisateur visite dans votre langue côté serveur tel que php ou asp si toutes les langues sont hébergés sur le même serveur comme celui-ci.

EDIT en réponse à des informations supplémentaires:

Vous ne pouvez pas obtenir des variables POST par la réécriture de différents domaines comme ça parce qu'il doit rediriger la requête. Le meilleur moyen est de déterminer la langue dans votre langue côté serveur au lieu d'utiliser mod_rewrite.

Si vous utilisez php ce serait comme ce

$lang = substr(strrchr($_SERVER['HTTP_HOST'], '.'), 1); 

D'autres langues ont des moyens similaires pour déterminer l'hôte.