mod_rewrite根据用户选择的语言

时间:2014-09-30 09:12:26

标签: apache .htaccess mod-rewrite redirect

我有 example.com ,目前重定向到 fr.example.com it.example.com en。 example.com 默认情况下。

我想更改为example.com自动重定向到 example.com/fr / example.com/it / 示例/ en / 默认情况下。

但我也想要希望看到其他语言能够这样做的用户&不重定向它们。

因此,如果意大利用户希望看到该网站的英文版本,我不想强​​迫她看到意大利版本。

如何将用户重定向到与其HTTP:Accept-Language匹配的版本到正确的路径,但如果他们实际点击http://example.com/en/foo.html之类的链接,则不会将用户重定向到http://example.com/it/foo.html在意大利电脑上?

目前的设置在这里:

    RewriteCond %{HTTP:Accept-Language} ^fr [NC]
    RewriteRule ^(.*)$ http://fr.example.com$1 [L,R=301]

    RewriteCond %{HTTP:Accept-Language} ^it [NC]
    RewriteRule ^(.*)$ http://it.example.com$1 [L,R=301]

    RewriteRule ^(.*)$ http://en.example.com$1 [L,R=301]

谢谢。

1 个答案:

答案 0 :(得分:1)

您必须仅在根级别执行重定向。

在你的htaccess(必须在根文件夹中)中替换你当前的代码

RewriteEngine On

# redirect www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# redirect language subdomain to subfolder
RewriteCond %{HTTP_HOST} ^([a-z]{2})\. [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/%1/$1 [R=301,L]

# redirect root folder to subfolder language user equivalent
RewriteCond %{HTTP:Accept-Language} ^(fr|it|en) [NC]
RewriteRule ^$ http://example.com/%1/ [L,R=301]