问题描述
目前我的 Google App Engine 项目使用的是 PHP55
,但由于社区不再支持此版本,我需要更新 app.yaml
文件以使用php74 runtime。
这些是来自 app.yaml
的 PHP55
文件的当前 URL 处理程序:
- url: /([^/]+\.PHP)
script: \1
- url: /.*
script: index.PHP
login: required
secure: always
当我指定 PHP74
运行时,这些 URL 处理程序会抛出错误:
INVALID_ARGUMENT: script field for handler '/([^/]+\.PHP)' must be set to 'auto' for runtime PHP74.
INVALID_ARGUMENT: script field for handler '/.*' must be set to 'auto' for runtime PHP74.
当我在 app.yaml
for PHP74
中进行建议的修复并更改 URL 处理程序时:
- url: /([^/]+\.PHP)
script: auto
- url: /.*
script: auto
login: required
secure: always
这将返回以下错误:ResourceNotFoundException: No routes found...
我对这些 URL 处理程序做错了什么?我的项目使用 PHP55
版本的 URL 处理程序,但当我在 script: auto
文件的 PHP74
版本中指定 app.yaml
时不工作。
解决方法
根据documentation,为了正确迁移你的app.yaml,你必须放置一个front controller来处理所有的路由。如果您是从旧版应用迁移,以下是文档提供的示例:
switch (@parse_url($_SERVER['REQUEST_URI'])['path']) {
case '/':
require 'homepage.php';
break;
case '/contact.php':
require 'contact.php';
break;
default:
http_response_code(404);
exit('Not Found');
}
另外,我建议您检查一下您的 app.yaml 中是否使用了不推荐使用的元素,如果使用任何元素都会出错。 最后,如果这一切有效,我建议您检查 this 以查看您的 app.yaml 是否有任何您没有注意到的错误。