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

请求实现URL重定向:非.php后缀URL跳转至指定格式

正确的Nginx重定向配置方案

需求回顾

将不含.php字符串的URL重定向到指定格式(如https://example.com/abc/ → https://example.com/cat/abc),但带.php的URL(如https://example.com/abc.php)不做跳转。

原规则的错误点

你提供的规则rewrite ^(.*)\/(?!.*php)(.*)$ $1/cat/$3 redirect;报错的核心原因:

  • 捕获组不匹配:正则仅定义了2个捕获组,却引用了不存在的$3,导致Nginx解析失败
  • 负向预查位置错误:(?!.*php)仅匹配第二个斜杠后的内容,无法排除整个URL中含.php的情况
  • 冗余的开头捕获:^(.*)\/针对Nginx的URI匹配逻辑完全多余,会导致匹配范围混乱

正确配置方案

根据需求提供两种常用规则:

1. 仅处理末尾带斜杠的URL(匹配示例场景)

rewrite ^/(?!.*\.php)(.*)/$ /cat/$1 permanent;
  • 正则解析:
    • ^/(?!.*\.php):匹配以/开头,且**整个URI中不包含.php**的请求(负向预查直接排除目标URL)
    • (.*)/$:捕获斜杠后的内容,仅匹配末尾带斜杠的路径(如/abc/中的abc)
    • /cat/$1:重定向到目标路径,$1为捕获的内容
    • permanent:发送301永久重定向(若需临时跳转,替换为redirect)

2. 处理所有不含.php的URL(兼容末尾无斜杠的情况)

如果需要支持末尾无斜杠的路径(如/abc → /cat/abc),使用:

rewrite ^/(?!.*\.php|$)(.*)/?$ /cat/$1 permanent;
  • 新增|$:排除根目录/的跳转(若需要根目录也跳转,去掉|$即可)
  • /?$:允许末尾有或无斜杠

注意事项

  • 将规则放在Nginx配置的server块内,确保优先级高于其他rewrite规则
  • 若需排除实际存在的静态文件(如/abc.html),可添加条件判断:
    if (!-f $request_filename) {
        rewrite ^/(?!.*\.php|$)(.*)/?$ /cat/$1 permanent;
    }
    
  • 测试配置有效性:执行nginx -t检查语法,无误后重启Nginx生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:42:51