首先,我有一些指向同一网页的域名,每个域名都对应不同的语言。网页(Drupal)使用网址(/lang
)中的example.com/en
参数标识语言。
我需要将每个域重定向到相应的语言,所以我需要这样的东西:
我在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/en
而example.ru
更改为example.ru/ru
,而是将/en
附加到所有域。
这是我缺少的东西吗?
任何建议都会非常有用。
答案 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”。