nginx - Nginx 删除尾随问号
问题描述
我正在尝试在 Nginx 中制定重写规则,以从 url 中删除试用问号 ( ?
),但我无法正确处理。我已经为这样的斜杠做到了:
#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
应保持不变。
所以基本上只有在没有查询字符串的情况下才删除问号。我怎样才能做到这一点?
我检查了其他答案,但他们似乎想完全删除查询字符串,我只想在只有问号而没有参数的情况下删除。
解决方案
标记查询字符串的?
开始,并且不是rewrite
orlocation
指令使用的规范化 URI 的一部分。因此,您不能使用rewrite
语句将其删除。
您将需要查看$request_uri
变量中的原始请求。
例如:
if ($request_uri ~ ^(.*)\?$) { return 301 $1; }
请参阅此使用注意事项if
。
推荐阅读
- google-cloud-platform - 我是否会为在我关闭的项目中运行的 VM 实例付费?
- c++ - QPainter::drawImage 是阻塞调用吗?
- haskell - Haskell 流 - 如何在复制后将 1 个流分成 2 个?
- sed - 如何使用 SED(转置)重新排列数字
- typescript - 在 TypeScript 中键入 mapShape 函数
- sql-server - 为什么索引扫描用于不同的日期?某个日期,它将使用索引搜索
- r - 为什么 R 中的 all.equal 不测试每个观察值的差异,其中不匹配发生在容差量上,而不是聚合平均值?
- typescript - Typescript - 在我的界面中获取属性类型以避免使用任何
- xul - 无法在 Thunderbird 68.5.0 附加组件的 xul 对话框中触发 ondialogaccept 事件处理程序
- react-native - 导航回到开始屏幕