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

无法将PHP54迁移至PHP81:App Engine部署异常求助

PHP5.4项目迁移至PHP8.1时的路由匹配问题

原PHP5.x环境正常情况

使用PHP5.4(配置指定php55运行时)时,根路径index.php和contact.php均可正常加载,对应的app.yaml配置如下:

runtime: php55
api_version: 1
threadsafe: true
automatic_scaling:
  max_instances: 1

handlers:
  - url: /
    script: public/index.php
    secure: always
  - url: /(.+\.php)$
    script: public/\1

PHP8.1环境异常情况

迁移至PHP8.1运行时后,根路径index.php可正常加载,但访问contact.php时却返回了index.php的内容,对应的app.yaml配置如下:

runtime: php81
instance_class: F2

handlers:
  - url: /
    script: public/index.php
    secure: always
  - url: /(.+\.php)$
    script: public/\1

问题原因与修复方案

核心原因

GAE的PHP8.x环境对路由正则捕获组的引用规则、路由匹配优先级的处理逻辑与PHP5.x存在差异:

  • YAML中\1会被解析为转义字符,无法正确引用正则捕获的分组内容;
  • 路由匹配按配置顺序执行,若根路径规则先匹配,会拦截所有未被更精确规则匹配的请求(实际是正则匹配未生效导致.php请求落入根路径规则)。

修复后的app.yaml配置

runtime: php81
instance_class: F2

handlers:
  # 优先匹配所有.php结尾的请求,确保这类请求被正确转发到对应文件
  - url: /(.+\.php)$
    script: public/$1
    secure: always
  # 仅匹配根路径/,转发到index.php
  - url: /
    script: public/index.php
    secure: always

关键调整点

  1. 调整路由顺序:将PHP文件的匹配规则放在根路径规则之前,确保.php结尾的请求优先被匹配;
  2. 修正捕获组引用:将\1改为$1,避免YAML转义问题,同时符合PHP8.x环境的路由变量引用规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:05:04