Nginx 域名跳转求助

2015-08-10 09:04:31 +08:00
 az
现在有这个需求
http://www.example.com/aboutus/?age=33&hl=zh
跳转到
http://www.example.com.cn/aboutus/?age=33

http://www.example.com.cn/aboutus/?age=33&hl=en
跳转到
http://www.example.com/aboutus/?age=33



目前的代码是这样的:
if ($query_string ~ "^(.*)hl=en$"){
rewrite ^(.*) http://www.enfsolar.com.cn$1$2 permanent;
}

这样设置后,第一个url跳转到http://www.example.com.cn/aboutus/?age=33&hl=zh, 需要怎样修改,可以把后面的hl=zh去掉。

另外,如果需要判断域名,怎么改。
2799 次点击
所在节点    NGINX
15 条回复
fundon
2015-08-10 09:53:25 +08:00
修改 `$args` 变量,可以去掉 `hl=zh`
az
2015-08-10 10:34:12 +08:00
@fundon $args 怎么修改,可否给个例子。
az
2015-08-10 10:51:23 +08:00
@fundon 因为其他参赛是不确定的,如何去掉或删除hl的同时保持其他参数不变?
popok
2015-08-10 11:01:27 +08:00

本菜现学现卖
(http://.*)\.cn(.*)&hl=en 替换成$1$2

(http://.*?)(/.*)&hl=zh 替换成$1.cn$2
popok
2015-08-10 11:02:59 +08:00
不确定的参数部分用()括起来,然后替换的时候引用出来就行了,比如第一个()里的内容,就是$1,第二个括号里的就是$2以此类推
shiniv
2015-08-10 11:09:53 +08:00
if ( $query_string ~ ^(.*)hl=en(.*)$) {
rewrite ^(.*) $scheme://www.enfsolar.com${1}${2} break;
}
if ( $query_string ~ ^(.*)hl=zh(.*)$) {
rewrite ^(.*) $scheme://www.enfsolar.com.cn${1}${2} break;
}
不知道对不对 没具体试过
az
2015-08-10 11:16:27 +08:00
@shiniv 这个不行。 $1, $2 是rewrite后capture的,不是if里面的。
az
2015-08-10 11:17:43 +08:00
@popok 跳转的参数capture不到,Nginx默认全部copy过来。
shiniv
2015-08-10 11:23:30 +08:00
@az 那你试试这样呢
set $a $1;
set $b $2;
rewrite ^(.*) $scheme://www.enfsolar.com${a}${b}; break;
popok
2015-08-10 11:23:54 +08:00
@az 没听懂
popok
2015-08-10 11:27:54 +08:00
哦,原来是$query_string ,这个貌似获取不到aboutus,只能获取到age=33&hl=zh这部分吧?
az
2015-08-10 11:42:16 +08:00
@shiniv 这个方法太棒了。
修改后的:
if ($query_string ~ "^(.*)hl=zh$"){
set $a $1;
set $args "";
rewrite ^(.*) http://example.com.cn$1?$a permanent;
}

可是,问题来了,这样设置后,$a里面的&符号被转义了,要怎么改?
popok
2015-08-10 11:48:57 +08:00
可能需要用$request_uri这个吧?
shiniv
2015-08-10 13:43:47 +08:00
@az 你试一下用 @popok 说的 $request_uri 看如何
az
2015-08-10 14:04:20 +08:00
@shiniv
@popok
@fundon 感谢各位,最好这样了:
if ($query_string ~ "^(.*?)&?hl=zh$"){
set $args $1;
rewrite ^(.*) http://example.com.cn$1 permanent;
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/212001

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX