【Nginx】匹配重定向问题

Nginx 匹配重定向问题

需求

由于老地址不再维护,需要将请求以一定的格式转到新地址。

例如:

http://xxx/query/123 转到 https://xxx/query.html?no=123

解决方法

配置Nginx匹配转发就可解决问题。

配置如下:

location ~ /query {
    rewrite ^/query/(.*) https://xxx/query.html?no=$1 permanent;
}

这样就可以将监听域名下的/query/123重定向到/query.html?no=123

更深层次的问题

使用中发现如果参数中123带有特殊符号,比如有两个/存在时,重定向过去的参数只会有一个/.

http://xxx/query/12//3 会重定向到 https://xxx/query.html?no=12/3,少了一个/

可能是由于location匹配时,将后面都作为请求地址匹配,自动将//解析成了/(待验证)。

可以使用$request_uri将整个请求链接匹配。

配置如下:

location ~ ^/query {
    if ($request_uri ~ ^/source/(.*)) {
        set $q $1;
        rewrite . https://xxx/query.html?no=$q;
    }
}

$request_uri进行匹配,匹配值赋值给$q,然后将$q作为参数重定向。这样就可以解决问题了。

rewrite 最后一项参数释义

标记符号 说明
last 本条规则匹配完成后继续向下匹配新的location URI规则
break 本条规则匹配完成后终止,不在匹配任何规则
redirect 返回302临时重定向
permanent 返回301永久重定向,使用最多,可能造成浏览器缓存严重

你可能感兴趣的:(Nginx,nginx,nginx重定向,nginx匹配重定向,nginx匹配特殊字符串,特殊字符重定向)