You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx重写规则配置:移除URL尾部斜杠但排除带查询字符串的情况

嘿,这个需求其实很好解决,我们只需要给原有的重写规则加个判断条件,让它只对没有查询字符串的URL生效就行。

你原来的rewrite ^/(.*)/$ /$1;会匹配所有以斜杠结尾的URL,不管后面有没有?xxx这类查询参数,所以会误把/page/?query=xxx也重写成/page?query=xxx,这显然不是你想要的结果。

我们可以利用Nginx的内置变量$is_args——这个变量在URL带有查询字符串时会返回?,没有查询字符串时则是空字符串。基于这个特性,有两种简洁的配置方式:

方式一:用if块包裹(逻辑更直观)

server {
    # 你的其他server配置(比如listen、server_name等)...

    if ($is_args = "") {
        # 仅当无查询字符串时移除尾部斜杠,permanent是301永久重定向,测试阶段可换成redirect(302临时)
        rewrite ^/(.*)/$ /$1 permanent;
    }

    # 你的其他location配置...
}

方式二:条件直接写在rewrite后(代码更紧凑)

server {
    # 你的其他server配置...

    # 同样是仅无查询字符串时触发重写
    rewrite ^/(.*)/$ /$1 permanent if ($is_args = "");

    # 你的其他location配置...
}

效果验证

配置生效后:

  • 访问https://www.domain.tld/page/(无查询参数):会被301重定向到https://www.domain.tld/page
  • 访问https://www.domain.tld/page/?query=xxx(带查询参数):不会触发重写,保留原URL的尾部斜杠

你可以用curl -I命令快速验证:

# 测试无查询参数的情况,应返回301状态码
curl -I https://www.domain.tld/page/

# 测试带查询参数的情况,应返回200(或你配置的业务状态码),无重定向
curl -I https://www.domain.tld/page/?query=xxx

注意:permanent适合生产环境(搜索引擎会更新索引),redirect适合测试阶段;同时确保这个规则放在server块的合适位置,避免被其他location或rewrite规则覆盖。

内容的提问来源于stack exchange,提问作者degdev9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:02:31