我正在使用带有PHP的Google App Engine。我希望文件夹HTML
中的所有Client_Pages
文件都被识别并作为静态文件提供,并且同一文件夹中的所有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
文件中为我网站中的每个页面添加一行,但我宁愿找到不同的方式。
- url: /(.+\.php)
script: \1
那么\1
意味着什么?或者哪里有好的参考?
好的,以上内容适用于php
个网页,但 NOT 适用于HTML网页,为什么?
- url: /(.+\.html)
static_dir: \1
我得到了一些工作。这会加载我的PHP
和HTML
页面:
- url: /(.+\.php)
script: \1
- url: /Client_Pages
static_dir: Client_Pages
所以我找到了一个解决方案,但我仍然完全不知道它为什么会起作用,或者这些符号意味着什么。
我很抱歉在发布过程中找到了我自己问题的部分答案,但是如果有人能解释为什么会有效,我会给你应得的分数。
答案 0 :(得分:5)
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,因为第一个正则表达式将匹配任何incomming URL。