.htaccess:语言重定向

时间:2010-08-06 15:22:04

标签: apache wordpress .htaccess internationalization redirect

我正在尝试将我博客的访问者重定向到法语或英语版本。 所以我做了这个.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#---------------------
# Language Redirection
#---------------------
# Checking if the redirection didn't occur yet
# Checking that the url doesn't begin with /en
RewriteCond %{REQUEST_URI} !^/en(.*)$

# Checking if the user is in english
RewriteCond %{HTTP:Accept-Language} ^en [NC]

# Redirecting from /the/url to /en/the/url
RewriteRule ^(.*)$ /en/$1 [L,R=301]

#----------------------
# Wordpress Redirection
#----------------------
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

基本上,我想将来自谷歌的访客从/ my / article重定向到/ en / my / article,如果他们是英语的话。 相反,有一个无限循环!我认为REQUEST_URI始终是index.php,因为最后一个RewriteRule。

有没有人这样做过?

非常感谢

1 个答案:

答案 0 :(得分:1)

Accept-Language不仅仅是一个同等值列表;它是一个加权值列表,其中每个值可以具有一个质量值,该值用0到1之间的值指定首选项。这意味着仅仅因为一个特定值的出现并不意味着该值是最优选的值。事实上,质量值为0意味着“根本不可接受”。

因此,不仅要查看是否存在特定子字符串,而应该解析加权值列表,并找出首选值与可用值之间的最佳匹配。

但mod_rewrite不适合这项工作。你应该更好地使用更强大的语言,比如PHP。