Google App Engine app.yaml匹配所有PHP文件并匹配所有HTML文件并分别提供服务

时间:2014-03-04 22:08:35

标签: php html google-app-engine app.yaml

我正在使用带有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文件中为我网站中的每个页面添加一行,但我宁愿找到不同的方式。

等等哦!坚持,稍等!这适用于加载我的PHP文件:

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

那么\1意味着什么?或者哪里有好的参考?

好的,以上内容适用于php个网页,但 NOT 适用于HTML网页,为什么?

- url: /(.+\.html)
  static_dir: \1

我得到了一些工作。这会加载我的PHPHTML页面:

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

- url: /Client_Pages
  static_dir: Client_Pages

所以我找到了一个解决方案,但我仍然完全不知道它为什么会起作用,或者这些符号意味着什么。

我很抱歉在发布过程中找到了我自己问题的部分答案,但是如果有人能解释为什么会有效,我会给你应得的分数。

1 个答案:

答案 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。