2010-08-06 85 views
0

我正在嘗試將博客的訪問者重定向到法語或英語版本。 所以我做了這個的.htaccess:.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> 

基本上,我想我的訪問者來自谷歌未來的/我/條重定向到/ EN /我/文章,如果他們是英語。 相反,有一個無限循環!我認爲REQUEST_URI始終是index.php,因爲最後一個RewriteRule。

有沒有人做過這個?

非常感謝

回答

1

Accept-Language不僅僅是一個同等值的列表;它是一個加權值列表,其中每個值都可以具有一個質量值,該值用0和1之間的值指定偏好。這意味着僅僅因爲出現一個特定值並不意味着該值是最優選的值。事實上,0的質量值意味着「根本不可接受」。

因此,不要只是查看是否存在某個特定的子字符串,而應該解析加權值列表並找到首選值與可用值之間的最佳匹配。

但mod_rewrite並不適合這份工作。您應該更好地使用像PHP這樣的更強大的語言。

+0

感謝您的回答。 基本上,如果用戶在其語言列表的開始處放置英語,那麼我的.htaccess中的RewriteCond將會被釋放,因此他將被重定向。 – 2010-08-06 16:15:53

+0

@Benjamin Netter:但在開始時使用'en'並不意味着英語是最受歡迎的語言。它可能具有1以外的質量值(可能甚至爲0),並且可能有其他語言優於英語。那麼,爲什麼你不用PHP來進行語言協商,你可以做的不僅僅是簡單的字符串比較? – Gumbo 2010-08-06 16:26:35

+0

這不是我想要做的。 – 2010-08-06 16:47:26