RewriteCond和rewriteRule重定向,具体取决于域

时间:2016-05-27 07:58:07

标签: apache .htaccess mod-rewrite url-rewriting

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

  • 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.com更改为example.com/enexample.ru更改为example.ru/ru,而是将/en附加到所有域。 这是我缺少的东西吗?

任何建议都会非常有用。

2 个答案:

答案 0 :(得分:2)

这应该有效:

# 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

答案 1 :(得分:1)

您可以使用以下规则:

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”。