技术解析

Nginx 域名跳转求助
0
2021-05-26 15:10:35
idczone
现在有这个需求
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去掉。

另外,如果需要判断域名,怎么改。
修改 `$args` 变量,可以去掉 `hl=zh`

$args 怎么修改,可否给个例子。

因为其他参赛是不确定的,如何去掉或删除hl的同时保持其他参数不变?


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

不确定的参数部分用()括起来,然后替换的时候引用出来就行了,比如第一个()里的内容,就是$1,第二个括号里的就是$2以此类推

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;
}
不知道对不对 没具体试过

这个不行。 $1, $2 是rewrite后capture的,不是if里面的。

跳转的参数capture不到,Nginx默认全部copy过来。

那你试试这样呢
set $a $1;
set $b $2;
rewrite ^(.*) $scheme://www.enfsolar.com${a}${b}; break;

没听懂

哦,原来是$query_string ,这个貌似获取不到aboutus,只能获取到age=33&hl=zh这部分吧?

这个方法太棒了。
修改后的:
if ($query_string ~ "^(.*)hl=zh$"){
set $a $1;
set $args "";
rewrite ^(.*) http://example.com.cn$1?$a permanent;
}
可是,问题来了,这样设置后,$a里面的&符号被转义了,要怎么改?

可能需要用$request_uri这个吧?


你试一下用 说的 $request_uri 看如何



感谢各位,最好这样了:
if ($query_string ~ "^(.*?)&?hl=zh$"){
set $args $1;
rewrite ^(.*) http://example.com.cn$1 permanent;
}

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服