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

Nginx正则匹配含非查询字符串?的URL并实现重定向

Nginx重定向带?的博客URL解决方案

问题原因

你之前的匹配失败,是因为Nginx的location指令仅匹配请求URI(即?之前的部分),而?后面的内容属于查询字符串,不属于URI范畴。你的目标URL中,请求URI实际是/,?/blog/article/my-blog-post里的?是查询字符串的起始符,所以直接在location里写/?或/\?根本匹配不到目标请求。

解决配置

以下两种配置都能实现批量重定向,将https://example.co.uk/?/blog/article/any-blog-post永久重定向到https://example.co.uk/blog/any-blog-post:

方法一:使用if结合$request_uri(推荐)

server {
    # 你的其他server配置(监听端口、域名等)

    if ($request_uri ~ ^/\?/blog/article/(.*)$) {
        # 301是永久重定向,若需临时重定向可改为302
        return 301 https://example.co.uk/blog/$1?;
    }
}
  • $request_uri:包含客户端发送的完整请求路径(包括?和后续查询字符串),能精准匹配目标格式。
  • 正则^/\?/blog/article/(.*)$:捕获/blog/article/之后的文章路径部分到变量$1。
  • 末尾的?:用于清除重定向后的URL中多余的查询字符串,避免出现https://example.co.uk/blog/any-blog-post?这种格式。

方法二:使用rewrite指令

server {
    # 你的其他server配置

    rewrite ^/\?/blog/article/(.*)$ https://example.co.uk/blog/$1? permanent;
}

这里的permanent等同于301永久重定向,同样通过正则捕获文章路径,末尾的?清除多余查询字符串。

注意事项

  1. 若你的Nginx配置中有多个server块,确保将规则放在对应域名的server块下。
  2. 配置修改后,需执行nginx -s reload重新加载配置生效。
  3. 优先使用return指令,性能比rewrite更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:07:12