.htaccess: перенаправление языков - PullRequest
0 голосов
/ 06 августа 2010

Я пытаюсь перенаправить посетителей моего блога на французскую или английскую версию.Итак, я сделал это .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>

По сути, я бы хотел перенаправить своих посетителей, приходящих из Google, из / my / article в / en / my / article, если они англоязычные.Вместо этого существует бесконечный цикл!Я думаю, что REQUEST_URI всегда index.php из-за последнего RewriteRule.

Кто-нибудь когда-либо делал это?

Большое спасибо

1 Ответ

1 голос
/ 06 августа 2010

Accept-Language - это не просто список равных значений; это скорее список взвешенных значений, где каждое значение может иметь значение качества, которое задает предпочтение значением от 0 до 1. Это означает, что только из-за появления одного конкретного значения это не означает, что это значение является наиболее предпочтительным , Фактически, значение качества 0 означает «совсем не приемлемо».

Таким образом, вместо того, чтобы просто посмотреть, присутствует ли конкретная подстрока, вам лучше проанализировать список взвешенных значений и найти лучшее соответствие между предпочтительными значениями и доступными значениями.

Но mod_rewrite не подходит для этой работы. Вам лучше использовать для этого более мощный язык, такой как PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...