2013-08-15 16 views
0

У меня есть survey community с 3-мя языками, используя плагин WPML для Wordpress для обработки языков. к сожалению, обнаружение языка работает только через php. Я хочу использовать htaccess, поскольку он быстрее, и пользователь не заметил задержки.htaccess распознавание языка возвращается в бесконечных переадресациях - кто находит ошибку?

Установка заключается в следующем:

community.netigate.net/ (English, International) 

community.netigate.net/de/ (German) 

community.netigate.net/sv/ (Swedish) 

я пробовал различные подходы и нашли лучший друг быть один на

http://tech-blog.borychowski.com/index.php/2009/03/htaccess/redirect-according-to-browser-language-mod-rewrite-and-http_accept_language/

Поскольку большинство пользователей немцы или Шведы, я хочу, чтобы «английский» был только стандартным резервным языком. установка может быть как это:

ПРОВЕРКИ ЕСЛИ Язык Swedish, ТОГДА перенаправлять на шведскую субстраницу
Проверьте, если язык немецкий, ТОГДА перенаправлять на немецкую субстраницу
ELSE использовать английский язык как Fallback

К сожалению, решение ниже заканчивается бесконечными переадресациями? Я что-то пропустил?

## Language Detection 

#The 'Accept-Language' header starts with 'sv' 
#and the test is case-insensitive ([NC]) 

RewriteCond %{HTTP:Accept-Language} ^sv [NC] 

#Redirect user to /sv/hauptseite address 
#sending 301 (Moved Permanently) HTTP status code 

RewriteRule ^$ /sv/ [L,R=301] 

#The 'Accept-Language' header starts with 'de' 
#and the test is case-insensitive ([NC]) 

RewriteCond %{HTTP:Accept-Language} ^de [NC] 

#Redirect user to /de/hauptseite address 
#sending 301 (Moved Permanently) HTTP status code 

RewriteRule ^$ /de/ [L,R=301] 

#For every other language (including English :)) use English 

RewriteRule ^$/[L,R=301] 

ответ

0

Добавить еще одно условие перезаписи, которая проверяет, если Перенаправление уже имело место

## Language Detection 

#The 'Accept-Language' header starts with 'sv' 
#and the test is case-insensitive ([NC]) 

RewriteCond %{HTTP:Accept-Language} ^sv [NC] 

#If not already redirected 
RewriteCond %{REQUEST_URI} !^/sv/ [NC] # ADDED 

#Redirect user to /sv/hauptseite address 
#sending 301 (Moved Permanently) HTTP status code 

RewriteRule ^$ /sv/ [L,R=301] 

#The 'Accept-Language' header starts with 'de' 
#and the test is case-insensitive ([NC]) 

RewriteCond %{HTTP:Accept-Language} ^de [NC] 

#If not already redirected 
RewriteCond %{REQUEST_URI} !^/de/ [NC] # ADDED 

#Redirect user to /de/hauptseite address 
#sending 301 (Moved Permanently) HTTP status code 

RewriteRule ^$ /de/ [L,R=301] 

#For every other language (including English :)) use English 

RewriteRule ^$ - [L] # MODIFIED 
+0

ничего себе, спасибо. должен был подумать о том, что резерв просто нужно перейти на стандартную версию и не нуждается в перенаправлении. Как вы относитесь к подобным языкам? Существуют различные шведские или немецкие версии как де де-де де-в де-ч же с изразцовой св Sv-се ... , так как я их нету в моих правилах перезаписи теперь, как бы я с ними справился? – Boxhorn

+0

@Boxhorn Это просто. Вы хотите, чтобы 'sv' или' sv-se' и т. Д. Все перенаправлялись на '/ sv /' или он должен был включать область, например '/ sv-se /' при перенаправлении? –

+0

хорошо, лучше всего было бы сгруппировать переадресовывает как св св-се св-фи ... перейти к homepage.com/se/ и де де-в де-ч ... Перейти на домашнюю страницу.com/de – Boxhorn

0

Эта строка здесь:

#For every other language (including English :)) use English 
RewriteRule ^$/[L,R=301] 

перенаправляет / назад /, в результате чего цикл перенаправления. Вам не нужна эта линия вообще.

+0

спасибо, звучит логично ;-) – Boxhorn