我正在使用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声明有问题吗?
答案 0 :(得分:2)
您正在标准环境app.yaml
文件中混合灵活的环境配置。
document_root
位于runtime_config
下,这是一种灵活的环境配置,而不是标准环境配置。在标准环境app.yaml Reference中没有提及这种配置。
在标准环境中,您需要使用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,都仅访问“公共”目录中的内容。