![](/img/trans.png)
[英]Google App Engine php, app.yaml - matching files without extension
[英]Google App Engine app.yaml match all PHP files and match all HTML files and serve respectively
我正在将Google App Engine与PHP结合使用。 我希望将Client_Pages
文件夹中的所有HTML
文件识别为静态文件,并希望将同一文件夹中的所有PHP
文件识别为脚本文件。 这是app.yaml
文件的外观:
application: myappname
version: 1
runtime: php
api_version: 1
threadsafe: true
handlers:
- url: /
script: index.php
- url: /Client_Pages/*.php
script: /Client_Pages/*.php
- url: /Client_Pages/*.html
static_dir: Client_Pages/*.html
我猜asterisk
不能在app.yaml
用作通配符? 我试过使用:
- url: /(.+\.php)
script: Client_Pages/\1
但这是行不通的。 我什至不知道所有符号的含义,所以我只是四处寻找,希望有什么用。 我不想这样做,但是我找不到所有这些符号功能的文档。
这将适用于特定页面:
- url: /Client_Pages/InputForm.php
script: /Client_Pages/InputForm.php
我可以在我的app.yaml
文件中为网站中的每个页面添加一行,但我宁愿找到其他方法。
等一下! 坚持,稍等! 这适用于加载我的PHP文件:
- url: /(.+\.php)
script: \1
那么\\1
是什么意思? 还是哪里有很好的参考?
好的,以上内容适用于php
页面,但这不适用于HTML页面,为什么?
- url: /(.+\.html)
static_dir: \1
我有事情要工作。 这将同时加载我的PHP
和HTML
页面:
- url: /(.+\.php)
script: \1
- url: /Client_Pages
static_dir: Client_Pages
所以我找到了一个解决方案,但我仍然完全不知道它为什么起作用,或者这些符号是什么意思。
对于在发布过程中发现我的问题的部分答案,我深表歉意。但是,如果有人可以解释它的工作原理,我将为您提供应有的论点。
python正则表达式参考以及app.yaml参考可能最容易遵循且最接近此处发生的情况。
本质上,正则表达式中的()指定一个分组(也称为反向引用),并且您的正则表达式可以具有许多组。 \\ 1是对第一组的引用,\\ 2是第二组的引用,以此类推。这样,您就可以提取出与正则表达式匹配的值,并使用该值来选择脚本或静态资源。
所以基本上对于正则表达式
/(.+\.php)
的意思是“使第一组的值与正则表达式。+ \\。php相匹配”。 可以使用指定第一组的\\ 1检索与正则表达式匹配的值。
因此,/foobar.php的值与正则表达式。+。php匹配,由于正则表达式()周围的(),\\ 1的值变为foobar.php。
稍微复杂一点:
/(.+)/(.+)\.php$
/foo/bar.php的值将匹配此正则表达式,\\ 1将等于'foo'[因为它是正则表达式中的第一组],而\\ 2将等于'bar'[因为它是第二组]。
请注意,此正则表达式与/foobar.php不匹配。
您还可以执行类似的操作,以使URL不需要包含.php。
- url: /(.+)
script: \1.php
通过使用static_dir,您无需进行分组,因为它将与目录中的任何文件匹配。
如果您只想匹配* .html文件,则可以使用
- url: /Client_Pages/(.*)\.html$
static_files: Client_Pages/\1.html
upload: Client_Pages/*\.html$
最后,app.yaml需要记住的事情是它从上到下处理规则,并且执行第一个匹配并停止处理。
所以一个app.yaml喜欢
- url: /.*
script: index.php
- url: /(.+)\.html
static_dir: html_pages
将始终执行index.php,因为第一个正则表达式将匹配任何传入的URL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.