基本上,我想要做的是重写所有网址,因为我们有许多不同的语言。我们有一台托管多个域的服务器。我们有www.example.com,www.example.fr,www.example.de,www.anotherdomain.com,www.anotherdomain.de。我想要做的是使用额外的url参数lang = en将所有来自example.xxx的请求重定向到www.example.com。这不应该影响其他领域,如www.anotherexample.com等。
这不起作用:
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]
使事情变得更加困难的一件事是ServerName与主机名完全不同,它被称为prod.migr.com。
任何建议都将不胜感激。
答案 0 :(得分:0)
试试这个:
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]
答案 1 :(得分:0)
PT标志很可能是您的问题。当目标是一个完整的域地址时,我从未见过它,因为它意味着URI会被mod_alias进一步重定向。
您应该使用的标志是QSA标志,以防用户访问的页面上有查询字符串。
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]
然而,更好的解决方案是检查用户正在使用服务器端语言(如php或asp)访问的主机,如果所有语言都托管在同一服务器上。
编辑以回复其他信息:
你不能通过重写到不同的域来获取POST变量,因为它必须重定向请求。
最好的办法是确定服务器端语言的语言,而不是使用mod_rewrite。
如果你使用php就像这样
$lang = substr(strrchr($_SERVER['HTTP_HOST'], '.'), 1);
其他语言有类似的方法来确定主机。