RewriteCond和重写规则取决于域的redirect

首先,我有几个域指向同一个网页,每个域对应于不同的语言。 网页(Drupal)使用URL( example.com/en )中的/lang参数标识语言。 我需要将每个域redirect到相应的语言,所以我需要这样的东西:

  • example.com – > example.com/en
  • example.ru – > example.ru/ru
  • example.fr – > example.fr/fr

我在htaccess中定义了一些规则,但他们没有做我所期望的:

 # Rewrite --- http://www.example.com => http://www.example.com/en RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] RewriteRule ^$ /en? [L,R=301] # Rewrite --- http://www.example.ru => http://www.example.ru/ru RewriteCond %{HTTP_HOST} !^www\.example\.ru [NC] RewriteRule ^$ /ru? [L,R=301] 

而不是改变example.comexample.com/enexample.ruexample.ru/ru它附加/en到所有域。 这是我失踪的东西吗?

任何build议将是非常有益的。

这应该工作:

 # Rewrite --- http://www.example.com => http://www.example.com/en RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteCond %{REQUEST_URI} !^/en(/(.*)$|$) RewriteRule ^ /en%{REQUEST_URI} [L,R=301] # Rewrite --- http://www.example.ru => http://www.example.ru/ru RewriteCond %{HTTP_HOST} ^www\.example\.ru [NC] RewriteCond %{REQUEST_URI} !^/ru(/(.*)$|$) RewriteRule ^ /ru%{REQUEST_URI} [L,R=301] 

如果您想让重写对用户不可见,您可以删除,R=301

你可以使用这些规则:

 RewriteEngine on # example.com to example.com/en RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule ^((?!en).*)$ /en/$1 [L,R] # example.ru|fr to example.com/ru|fr RewriteCond %{HTTP_HOST} ^(?:www\.)?.+\.(ru|fr)$ RewriteRule ^((?!ru|fr).*)$ /%1/$1 [L,R] 

只需在第一个RewriteCondition中将“example.com”替换为“youdomain.com”即可。