.htaccess的语言重定向310错误 [英] Htaccess language Redirect 310 error

查看:307
本文介绍了.htaccess的语言重定向310错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个语言的网站

Swedish side  www.site.com
English side  www.site.com/?lang=en

我用

RewriteEngine on
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|lo|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 .* www.site.com/?lang=en [L]

要获得所有语言,但瑞典的 www.site.com/?lang=en ,但我最终在一个310环。 缺什么?

To get all languages but Swedish to the www.site.com/?lang=en but I end up in a 310 loop. what is missing ?

推荐答案

您需要添加一个检查,以确保你不循环。

You need to add a check for lang to make sure you don't loop.

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|lo|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.site.com/?lang=%1 [L]

注意%1 是一个反向引用,在previous匹配的RewriteCond的2字母语言code。有关规则要注意的另一件事是,像 /something/file.html 的请求会被重定向到 http://www.site。 COM /?LANG =(2字母语言code)。本质上,原来的路径丢失。如果你想保留它,你需要匹配,并使用一个反向引用:

Note that the %1 is a backreference to the 2 letter language code that matched in the previous RewriteCond. The other thing about the Rule to note is that a request like /something/file.html will get redirected to http://www.site.com/?lang=(2 letter language code). Essentially, the original path is lost. If you want to keep it, you need to match and use a backreference:

RewriteRule ^(.*)$ http://www.site.com/$1?lang=%1 [L]

如果你想previous查询字符串也获得通过,例如, /something/file.php?a=b ,你需要添加 QSA 在括号中,这样它会被重定向到 http://www.site.com/somthing/file.php?lang=(2字母语言$ C $三)及; A = B

If you want previous query strings to also get passed, for example, /something/file.php?a=b, you need to add QSA in the brackets so that it will get redirected to http://www.site.com/somthing/file.php?lang=(2 letter language code)&a=b.

这篇关于.htaccess的语言重定向310错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆