现在有这个需求
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;
}