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

使用Caddy handle_path时,PHP的SCRIPT_NAME缺失完整路径如何解决?

解决Caddy handle_path下PHP $_SERVER['SCRIPT_NAME']缺失前缀的问题

问题根源是handle_path会自动剥离匹配的路径前缀(这里是/subpath/),导致传递给PHP-FPM的SCRIPT_NAME默认只保留剥离后的部分,因此需要手动补上前缀。

修改方案一:使用extra_env配置FastCGI变量

直接在php_fastcgi块中添加extra_env参数,将前缀拼接到SCRIPT_NAME前:

:80 {
    handle_path /subpath/* {
        php_fastcgi localhost:9000 {
            root /var/www/html
            extra_env SCRIPT_NAME="/subpath{fastcgi.SCRIPT_NAME}"
            extra_env PATH_INFO="/subpath{fastcgi.PATH_INFO}"
        }
    }
}

extra_env是Caddy专门用于传递额外FastCGI环境变量的指令,能精准覆盖默认的SCRIPT_NAME值,确保PHP拿到包含完整前缀的路径。

修改方案二:替换handle_path为handle+rewrite

如果不想手动拼接变量,也可以放弃handle_path,改用handle配合rewrite保留完整路径:

:80 {
    handle /subpath/* {
        rewrite * /subpath{path}
        php_fastcgi localhost:9000 {
            root /var/www/html
        }
    }
}

这种方式通过rewrite确保路径前缀不被剥离,PHP-FPM会自动拿到完整的SCRIPT_NAME。

两种方案都能实现需求,推荐第一种方案,因为它保留了handle_path的简洁性,仅针对性修复变量问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:42:37