GCP App Engine部署PHP应用重定向过多无法访问src目录资源
问题根因
你当前碰到的无限重定向问题,核心是两个错误叠加导致:
- 自建根目录
index.php做跳转的方案本身存在逻辑缺陷,在App Engine的请求转发链路下会形成循环 app.yaml没有正确配置路径映射规则,试图靠PHP跳转代替平台原生路由能力
本地环境、GCP Compute Engine环境运行正常,是因为这两个场景用的是自建Web服务器(Apache/Nginx)的默认目录索引逻辑,和App Engine的路由匹配逻辑完全不同。
正确配置步骤
- 直接删除项目根目录下你自己创建的、用于跳转的
index.php文件,从根源消除重定向循环的触发点,完全不需要用PHP代码做路径跳转。 - 在项目根目录创建/修改
app.yaml,直接通过平台原生路由规则把所有请求映射到src目录下的对应资源,配置示例如下:
# 请替换为你项目实际使用的PHP版本,支持php74、php81、php82等版本 runtime: php82 handlers: # 站点根路径直接映射到src目录下的主入口文件,无额外HTTP跳转 - url: / script: src/index.php secure: always # 匹配所有PHP脚本请求,自动映射到src目录下对应路径的PHP文件 - url: /(.+\.php)$ script: src/\1 secure: always # 匹配所有静态资源,直接读取src目录下对应静态文件返回 - url: /(.+\.(png|jpg|jpeg|gif|ico|css|js|svg|woff|woff2|ttf))$ static_files: src/\1 upload: src/.+\.(png|jpg|jpeg|gif|ico|css|js|svg|woff|woff2|ttf)$ expiration: "1d" secure: always # 兜底路由,适配框架伪静态需求,所有未匹配的请求统一走主入口文件 - url: /.* script: src/index.php secure: always
配置验证说明
- 上述配置不需要修改
src目录下的任何原有代码,部署后访问根路径会直接执行src/index.php,不会产生任何重定向 login.php、logout.php等PHP文件会自动映射,访问/login.php实际执行的是src/login.phpicons.png等静态资源会自动被静态文件规则匹配,直接返回src目录下的对应资源,不会经过PHP解析,性能更好- 如果你的项目不需要强制HTTPS访问,可以删掉所有规则下的
secure: always配置项 - 配置中的正则捕获组会自动适配
src下的多级目录,不需要为子目录额外添加路由规则
内容的提问来源于stack exchange,提问作者Kareem Rashwan
相关产品推荐
相关产品推荐

