我正在尝试将Codeigniter站点部署到Googe App Engine PHP 7。 该站点包含一个联系表单插件,该插件存在于应用程序文件夹外的data
文件夹中,如下所示:
Root
--application
--data
--css
--js
--system
当我从Cloud Shell本地主机访问此页面时,它会完美加载:
https://8080-dot-1234567-dot-devshell.appspot.com/data/contact.php
但是,在我将此站点部署到Google App Engine并尝试访问该页面后,它返回了一个404 Not Found
错误:
https://mysite.appspot.com/data/contact.php
有人可以解释为什么该页面在本地主机上工作,但在部署到 Google App Engine 时却不能?
在这种情况下,app.yaml
文件的位置至关重要:此文件所在的目录被视为应用程序的顶层。这有两个主要含义:
- 应用程序所需的所有项目都必须位于此应用顶级目录中的某个位置,应用部署过程不会位于其外部。我怀疑这是您的情况 - 如果您的
app.yaml
文件在application
目录内,而data
文件位于目录外。可以通过将必要的工件/目录从顶级目录外部符号链接到内部来解决此问题(请参阅如何在与 app.yaml 不同的文件夹中上传 Google App Engine (Go( 项目(,但这并不适用于所有运行时。 - 用于访问应用中项目的路径需要相对于应用顶级目录。
某些运行时的开发服务器包括对这些检查(使您的应用程序的行为更接近它在 GAE 上部署时的行为方式(,但并非所有运行时都有此检查(有些甚至没有专用的开发服务器(,这为实时应用和开发应用之间的这种差异留出了空间。
注意:在此上下文中,"应用程序"所指的实际上是 GAE 服务/模块(在单个服务应用程序的情况下,它们是一样的(。但是,对于具有多个服务的 GAE 应用,所有这些注意事项都需要应用于每个应用服务。在这种情况下可能会引起人们的兴趣:就文件夹结构而言,Google App Engine 应用中的默认服务/模块是否可以是非默认服务的同级服务/模块?