产品服务AMH 免费服务器主机面板SSL证书 免费SSL证书申请 担保单 免费安全、零费率交易平台编程助手免费智能写代码、翻译AMYSQL 免费MySQL管理工具

AMH 社区首页

 AMH社区 - 开放自由有价值的社区

[求助帖] 求助!Nginx怎么做根据语言跳转?

来自未来的家伙
铜牌会员
835.83 价值分

来自未来的家伙 发表于 2013-07-24 13:40:17
之前在论坛里看过代码是这样:

if ( $http_accept_language ~* ^[^ja])
{
return 404; #非日文用户访问网站返回404
}
这个只是一个,否则就是404,

但是多语言的代码要怎么写?如果还有其他的语言返回不同的站点怎么写?

支持不会代码真苦恼。。。

2013-07-24 13:40:17 1

ylx
银牌会员
4334.00 价值分

if 嵌套…… 学过c还是有点好处 嘿嘿 ja代表日本
  支持 (0分)  反对 (0分)
回复  2013-07-24 13:49:16 2

来自未来的家伙
铜牌会员
835.83 价值分

引用:
ylx 发表于 2013-7-24 13:49
if 嵌套…… 学过c还是有点好处 嘿嘿 ja代表日本


我也只知道那个ja代表日本。。。

嵌套怎么写呢?每一段都重复if的那段么?这样没成功啊。。。
  支持 (0分)  反对 (0分)
回复  2013-07-24 13:50:53 3

amysql
创始人
99530.81 价值分

那就写多个if

if ( $http_accept_language ~* ^[^ja])
{
return 404; #非日文用户访问网站返回404
}

$http_accept_language 是访客语言变量
语言值参考,
http://blog.csdn.net/pandancne/article/details/6138043

[^ja]括号中^是非的意思,也就是非日本
外面从开始匹配,也就是非ja开头
~* 不区分大小正则匹配

符合条件,return 返回400状态。


  支持 (0分)  反对 (0分)
回复  2013-07-24 15:24:08 4

AMH面板 - 好用高效低占用、安全可靠极稳定

来自未来的家伙
铜牌会员
835.83 价值分

本帖最后由 来自未来的家伙 于 2013-7-26 09:58 编辑

引用:
amysql 发表于 2013-7-24 15:24
那就写多个if

if ( $http_accept_language ~* ^[^ja])

直接在server的那个{}加进去然后就只能转到.de的那个去。。。
if ( $http_accept_language ~* [^de])
{
return http://www.google.de;
}

if ( $http_accept_language ~* [^zh])
{
return http://www.google.cn;
}


  支持 (0分)  反对 (0分)
回复  2013-07-26 09:20:27 5

来自未来的家伙
铜牌会员
835.83 价值分

本帖最后由 来自未来的家伙 于 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;
}

但是语言识别还是没有成功。。。
  支持 (0分)  反对 (0分)
回复  2013-07-26 10:39:13 6

amysql
创始人
99530.81 价值分

引用:
来自未来的家伙 发表于 2013-7-26 10:39
而且这样写有个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;
}

上面说反了,这样匹配试试。
  支持 (0分)  反对 (0分)
回复  2013-07-26 12:55:55 7

来自未来的家伙
铜牌会员
835.83 价值分

引用:
amysql 发表于 2013-7-26 12:55
if ( $http_accept_language ~* ^[de])
{
return http://www.google.de/de.php;


一开始跳转是成功了,但是过会浏览器提示出现循环了。。。打不开了就。。。
  支持 (0分)  反对 (0分)
回复  2013-07-26 14:18:43 8

amysql
创始人
99530.81 价值分

你跳到哪里去? 自己跳到自己那儿就循环了。
  支持 (0分)  反对 (0分)
回复  2013-07-26 15:50:39 9

来自未来的家伙
铜牌会员
835.83 价值分

引用:
amysql 发表于 2013-7-26 15:50
你跳到哪里去? 自己跳到自己那儿就循环了。

每个分站都有这样一段代码。。。
xxx.cn 如果浏览器是中文就不跳,xxx.de如果浏览器是中文就跳,
这样的是循环的话怎么办?
  支持 (0分)  反对 (0分)
回复  2013-07-26 16:38:59 10
 1 2 >  (总2页)
AMH社区列表
用户服务中心