我正在尝试在Nginx中制定重写规则,以从网址中删除试用问号(?
),但我无法正确执行。我这样做是为了使斜杠像这样:
#redirect all trailing slash URL's to the respective non trailing slash
rewrite ^/(.*)/$ /$1 permanent;
所以我认为将斜杠替换为问号也可以使用
rewrite ^/(.*)?$ /$1 permanent;
但是那没有用,但是我发现问号在正则表达式中有一定意义,所以我尝试将其转义:
rewrite ^/(.*)\?$ /$1 permanent;
但是那也不起作用,我尝试也删除了第一个斜杠:
rewrite ^(.*)\?$ $1 permanent;
但这也是一个失败,是的,我确实在两次测试之间重新启动了服务器。
这就是我想要做的:
www.mysite.com?
应该重定向到wwww.mysite.com
www.mysite.com/some/path?
应该重定向到wwww.mysite.com/some/path
www.mysite.com?some=vars
应该保持不变。www.mysite.com/some/path?some=vars
应该保持不变。因此,基本上,如果没有查询字符串,则仅删除问号。 我该怎么办?
我已经检查了其他答案,但他们似乎想完全删除查询字符串,仅在只有问号而没有参数的情况下才删除。
答案 0 :(得分:0)
?
标记查询字符串的开头,并且不属于rewrite
或location
指令使用的规范化URI的一部分。因此,您无法使用rewrite
语句将其删除。
您需要查看$request_uri
变量中的原始请求。
例如:
if ($request_uri ~ ^(.*)\?$) { return 301 $1; }
有关if
的使用,请参见this caution。