AMH 社区首页
AMH社区 - 开放自由有价值的社区
[求助帖] 求助!Nginx怎么做根据语言跳转? |
|
---|---|
来自未来的家伙 |
来自未来的家伙 发表于 2013-07-24 13:40:17
之前在论坛里看过代码是这样:
if ( $http_accept_language ~* ^[^ja]) { return 404; #非日文用户访问网站返回404 } 这个只是一个,否则就是404, 但是多语言的代码要怎么写?如果还有其他的语言返回不同的站点怎么写? 支持不会代码真苦恼。。。
点赞,加油! (0分)
2013-07-24 13:40:17 1
|
ylx |
if 嵌套…… 学过c还是有点好处 嘿嘿 ja代表日本
回复
2013-07-24 13:49:16 2
|
来自未来的家伙 |
我也只知道那个ja代表日本。。。 嵌套怎么写呢?每一段都重复if的那段么?这样没成功啊。。。
回复
2013-07-24 13:50:53 3
|
amysql |
那就写多个if
if ( $http_accept_language ~* ^[^ja]) { return 404; #非日文用户访问网站返回404 } $http_accept_language 是访客语言变量 语言值参考, http://blog.csdn.net/pandancne/article/details/6138043 [^ja]括号中^是非的意思,也就是非日本 外面从开始匹配,也就是非ja开头 ~* 不区分大小正则匹配 符合条件,return 返回400状态。
回复
2013-07-24 15:24:08 4
AMH面板 - 好用高效低占用、安全可靠极稳定 |
来自未来的家伙 |
本帖最后由 来自未来的家伙 于 2013-7-26 09:58 编辑
直接在server的那个{}加进去然后就只能转到.de的那个去。。。 if ( $http_accept_language ~* [^de]) { return http://www.google.de; } if ( $http_accept_language ~* [^zh]) { return http://www.google.cn; }
回复
2013-07-26 09:20:27 5
|
来自未来的家伙 |
本帖最后由 来自未来的家伙 于 2013-7-26 11:22 编辑
而且这样写有个bug啊。。。要是我是默认不改语言的话是中文,然后在英文站上做了语言跳转就永远也看不到这个英文站了么。。。有办法确认是第二次点击么? if ( $http_accept_language ~* [^de]) { return http://www.google.de/de.php; } if ( $http_accept_language ~* [^zh]) { return http://www.google.cn/cn.php; } 但是语言识别还是没有成功。。。
回复
2013-07-26 10:39:13 6
|
amysql |
if ( $http_accept_language ~* ^[de]) { return http://www.google.de/de.php; } if ( $http_accept_language ~* ^[zh]) { return http://www.google.cn/cn.php; } 上面说反了,这样匹配试试。
回复
2013-07-26 12:55:55 7
|
来自未来的家伙 |
引用: 一开始跳转是成功了,但是过会浏览器提示出现循环了。。。打不开了就。。。
回复
2013-07-26 14:18:43 8
|
amysql |
你跳到哪里去? 自己跳到自己那儿就循环了。
回复
2013-07-26 15:50:39 9
|
来自未来的家伙 |
每个分站都有这样一段代码。。。 xxx.cn 如果浏览器是中文就不跳,xxx.de如果浏览器是中文就跳, 这样的是循环的话怎么办?
回复
2013-07-26 16:38:59 10
|