我正在尝试将除瑞典语之外的所有用户重定向到我网站的英语版,但由于默认情况下瑞典语浏览器都安装了英语和瑞典语,因此都会被重定向到英语端。
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
上?
答案 0 :(得分:1)
accept-language
string是一个复杂的野兽 - 它可以包含多个值:
se, en-gb;q=0.8, en;q=0.7
它们中的每一个也可以用几种不同的方式编写:
se, se-SE, se-FI, se-EE // Swedish in .... Sweden, Finland, Estonia
虽然理论上你的要求肯定会反映在正则表达式中,但这样的东西通常最好用你正在使用的任何服务器端语言来完成 - 它必然会有现成的库来解析{ {1}}正确,甚至可能将其缩减为2个字母的语言字符串,然后您可以根据该字符串进行重定向。
答案 1 :(得分:-1)
也许您应该尝试添加一条规则来检查该语言是否包含瑞典语...我希望我可以假设瑞典语浏览器有类似“瑞典语和英语”的内容?
另一种选择是检查瑞典语,并使用[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]