Двухязычные браузеры перенаправляют - PullRequest
0 голосов
/ 28 ноября 2011

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

Swedish : xyz.com
English : xyz.com/?lang=en

получил некоторую помощь с этим кодом, и он работает, но не для шведских браузеров с установленным enlish

RewriteEngine on
RewriteCond %{QUERY_STRING} !(&|^)lang=
RewriteCond %{HTTP:Accept-Language} (aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br|ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo| fr|fy|ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|l o|lt|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sd|sg|sh |si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz|vi|vo|wo|xh|yo| zh|zu) [NC]
RewriteRule ^(.*)$ http://www.xyz.com/$1?lang=%1 [L]

Как это сделать, чтобы каждый браузер перенаправлялся на xyz.com/?lang=en, но за исключением шведского, которыйостаться на xyz.com?

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Строка accept-language является сложным зверем - она ​​может содержать несколько значений:

 se, en-gb;q=0.8, en;q=0.7  

каждое из них также может быть записано несколькими различными способами:

 se, se-SE, se-FI, se-EE  // Swedish in .... Sweden, Finland, Estonia

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

0 голосов
/ 28 ноября 2011

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

Другой вариант - проверить шведский язык и «переписать» его, используя опцию [L], а затем добавить строку после этой переменной lang.

RewriteEngine on
RewriteCond %{QUERY_STRING} !(&|^)lang=
RewriteCond %{HTTP:Accept-Language} (se) [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L]
RewriteRule ^(.*)$ http://www.example.com/$1?lang=%1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...