我的网站上有一个页面(仅供登录用户访问),如下所示:
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;
}
我曾尝试用\转义位置中的%,但似乎都没有用。
我想念什么?
答案 0 :(得分:1)
在通过location
和rewrite
伪指令处理URI之前,已对URI进行了解码和规范化,因此%25
看起来像单个%
。
您问题中的示例显示了正则表达式 location
语句。 ~
运算符用于区分大小写的匹配,而~*
运算符用于不区分大小写的匹配。
要使问题中的示例生效,您需要将其更改为:
location ~* /forum%2Fnew
或者:
location ~ /forum%2fnew
有关详细信息,请参见this document。