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

Nginx配置带扩展名SEO友好URL报404 重写跳转规则求助

问题原因

当前配置返回404的核心原因是Nginx的location匹配优先级规则:正则匹配优先级高于普通前缀匹配,所有带.png后缀的/gallery/*请求会优先命中你配置的静态资源缓存规则,直接尝试读取服务器对应路径下的实体PNG文件,找不到就直接返回404,根本不会走到后续的通用路由重写逻辑。

配置调整方案

按以下顺序调整nginx.conf配置即可,注意规则顺序不能乱:

  1. 优先拦截/gallery路径请求:在所有正则匹配规则(包括静态资源规则)之前,新增/gallery路径的专属匹配规则,用^~标记提升匹配优先级,避免被静态资源规则拦截。
    如果你/gallery路径下没有真实存在的静态图片资源,所有请求都要走动态脚本,直接加以下配置:

    # 放在所有正则location之前,优先匹配/gallery/下的所有请求
    location ^~ /gallery/ {
        rewrite ^/gallery/(.*)$ /vendor/mindgoner/script.php?seo_path=$1 last;
    }
    

    如果/gallery下有部分真实存在的静态图片需要直接返回,不想走动态脚本,就改成以下配置,兼顾静态文件和动态路由:

    location ^~ /gallery/ {
        # 先查找对应路径的真实文件,找到就直接返回,找不到再走动态重写
        try_files $uri $uri/ @gallery_php;
    }
    location @gallery_php {
        rewrite ^/gallery/(.*)$ /vendor/mindgoner/script.php?seo_path=$1 last;
    }
    

    重写规则里的$1会捕获/gallery/后面的完整路径字符串,比如访问/gallery/abc/123.png时,seo_path参数值就是abc/123.png,你在script.php里通过$_GET['seo_path']就能拿到完整路径,自行做参数拆分逻辑即可。

  2. 调整原有静态资源规则:给原来的静态资源匹配规则加try_files判断,只有文件真实存在时才走缓存逻辑,不存在就转去通用路由,避免其他路径下带静态后缀的动态路由被误拦截:

    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|swf)$ {
        try_files $uri @rewrite;
        expires 7d;
    }
    
  3. 保留原有通用路由规则:你之前写的根路径匹配、@rewrite通用重写规则修正语法后直接保留即可:

    location / {
        try_files $uri $uri/ @rewrite;
    }
    
    location @rewrite {
        rewrite ^/([a-zA-Z0-9_-]+)?\/?([a-zA-Z0-9_-]+)?\/?([a-zA-Z0-9_-]+)?\/?([a-zA-Z0-9_-]+)?\/?([a-zA-Z0-9_-]+)?\/?([a-zA-Z0-9_-]+)?$ /index.php?a=$1&b=$2&c=$3&d=$4&e=$5&f=$6 break;
    }
    
生效验证

配置修改完成后,先执行nginx -t命令检查配置语法是否正确,确认没有报错后执行nginx -s reload重载配置即可生效。
请求处理逻辑说明:

  • 访问/gallery/*路径的请求会优先被专属规则捕获,重写到指定PHP脚本处理,不会去查找实体文件
  • 重写后的请求是.php后缀,会自动匹配你服务器原有的PHP解析规则(一般是配置了fastcgi_pass的.php location块),正常交给PHP-FPM执行,不会出现源码泄露或403问题
  • 其他路径下真实存在的静态资源依然会命中缓存规则,设置7天过期头,不影响原有静态资源加载性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:30:51