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

Nginx配置blog路径PHP伪静态跳转异常问题排查

问题根因

两个核心问题导致规则不生效:

  • Nginx中带~修饰符的正则location是严格按照配置文件书写顺序从上到下匹配的,一旦匹配到符合规则的请求就会停止向下查找。你配置的通用路径规则^/([^/]+)/?$写在/blog相关规则的前面,访问/blog/first-article时会被这条规则优先捕获,把first-article作为参数传给device.php,最终出现跳转到domain.tld/first-article的错误。
  • 你之前尝试的几组/blog规则本身存在语法和逻辑错误:
    • 第一组规则正则开头缺少路径起始的/,且错误给正则表达式加了多余引号,根本无法匹配到请求路径
    • 第二组rewrite规则多写了多余的?参数,且没有匹配不带尾斜杠的文章路径
    • 第三组规则虽然正则写法正确,但因为放在通用规则后面,永远没有匹配生效的机会
修正配置

将/blog相关的匹配规则移动到所有通用正则location规则的最前面,保证优先匹配,正确配置如下:

server {
    # 保留你原有的其他配置...

    # 注意:blog规则必须放在两个device.php通用规则的上方,优先匹配
    location ~ ^/blog/([^/]+)/?$ {
        try_files $uri $uri/ /blog/read.php?article=$1;
    }

    # 原有通用匹配规则,放在blog规则之后即可
    location ~ "^/([^/]+)/?$" {
        try_files $uri $uri/ /device.php?name=$1;
    }

    location ~ "^/([^/]+)/([^/]+)/?$" {
        try_files $uri $uri/ /device.php?name=$1&crversion=$2;
    }

    # 保留你原有的其他配置...
}

上面的正则已经同时兼容带尾斜杠(如/blog/first-article/)和不带尾斜杠(如/blog/first-article)的访问场景,不需要额外补充规则。

生效操作
  • 修改完配置后执行nginx -t,确认配置语法无错误
  • 语法校验通过后执行nginx -s reload重载配置即可生效
  • 访问domain.tld/blog/first-article验证,不会再出现跳转到根路径的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:06:11