在NGINX上重定向URI

时间:2019-07-23 23:31:40

标签: nginx

我的网站上有一个页面(仅供登录用户访问),如下所示:

https://www.example.com/forum/new

但是,有时,当用户单击或刷新时,他们将获得如下页面:

https://www.example.com/forum%252fnew

现在%25解码为%符号,%2f解码为“ /”,因此URI似乎已被双重编码。

我不确定这种编码是如何发生的,但是我认为一种解决方法是让Nginx重定向回正确的URL,如下所示:

location ~ /forum%252Fnew {
    return 301 https://www.example.com/forum/new;
}

我曾尝试用\转义位置中的%,但似乎都没有用。

我想念什么?

1 个答案:

答案 0 :(得分:1)

在通过locationrewrite伪指令处理URI之前,已对URI进行了解码和规范化,因此%25看起来像单个%

您问题中的示例显示了正则表达式 location语句。 ~运算符用于区分大小写的匹配,而~*运算符用于不区分大小写的匹配。

要使问题中的示例生效,您需要将其更改为:

location ~* /forum%2Fnew

或者:

location ~ /forum%2fnew

有关详细信息,请参见this document