在标准环境下的Google App Engine中忽略了document_root

时间:2018-07-25 01:48:54

标签: php google-app-engine

我正在使用Google App Engine中的PHP应用程序。我在Yaml中将document_root设置为“ public”,但是在部署应用程序时服务器会忽略它。

这是我的目录结构:

app engine:/
- public
  - good.php
  - index.php
- app.yaml
- bad.php
- php.ini

这是我的app.yaml的内容:

runtime: php55
api_version: 1
threadsafe: true

runtime_config:
  document_root: public

handlers:
- url: /(.+\.php)$
  script: \1

- url: /.*
  script: index.php

我希望发生的事情:

实际发生的事情:

我该如何解决?我想念什么吗? yaml文件中我的document_root声明有问题吗?

2 个答案:

答案 0 :(得分:2)

您正在标准环境app.yaml文件中混合灵活的环境配置。

document_root位于runtime_config下,这是一种灵活的环境配置,而不是标准环境配置。在标准环境app.yaml Reference中没有提及这种配置。

可能感兴趣:How to tell if a Google App Engine documentation page applies to the standard or the flexible environment

在标准环境中,您需要使用handlers配置来实现所需的功能。

请记住,它们的URL模式是相对于各自服务的{\ {1}}文件所在的根目录的。这就是为什么您的app.yaml脚本可以正常显示(与您的第一个处理程序模式匹配)的原因。我也希望bad.php给出404,而https://mysiteurl/good.php可以正常工作(但我不太确定,我是python用户,而不是php用户)。

答案 1 :(得分:2)

正如Dan Cornilescu's answer所指出的。标准环境yaml没有这样的document_root指令。

但是我最终通过使用以下YAML达到了我想要的目标:

runtime: php55
api_version: 1
threadsafe: true

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

- url: /.*
  script: public/index.php

通过这种方式,无论您浏览的是哪个url,都仅访问“公共”目录中的内容。