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

Ala*_*lls 1 html php 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
Run Code Online (Sandbox Code Playgroud)

我想这asterisk不是一个通配符app.yaml吗?我尝试过使用:

- url: /(.+\.php)
  script: Client_Pages/\1
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我甚至都不知道所有符号的含义,所以我只是在乱砍,希望有些东西可行.我不想这样做,但我找不到所有符号所做的文档.

这适用于特定页面:

- url: /Client_Pages/InputForm.php
  script: /Client_Pages/InputForm.php
Run Code Online (Sandbox Code Playgroud)

我可以在我的app.yaml文件中为我网站中的每个页面添加一行,但我宁愿找到一种不同的方式.

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

- url: /(.+\.php)
  script: \1
Run Code Online (Sandbox Code Playgroud)

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

好的,所以上面适用于php页面,但这不适用于HTML页面,为什么?

- url: /(.+\.html)
  static_dir: \1
Run Code Online (Sandbox Code Playgroud)

我得到了一些工作.这将加载我PHPHTML页面:

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

- url: /Client_Pages
  static_dir: Client_Pages
Run Code Online (Sandbox Code Playgroud)

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

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

Stu*_*ley 5

蟒蛇正则表达式的参考是可能比较容易跟踪和最接近这里发生了什么,与一起的app.yaml参考.

本质上,正则表达式中的()指定分组(也称为反向引用),并且您的正则表达式可以包含许多组.\ 1是对第一组的引用,\ 2将是第二组等等.这使您可以提取与正则表达式匹配的值,并使用该值来选择脚本或静态资源.

所以基本上用于正则表达式

/(.+\.php) 
Run Code Online (Sandbox Code Playgroud)

是说'使第一组与正则表达式匹配任何值.+\.php'.可以使用指定第一个组的\ 1来检索与正则表达式匹配的值.

所以值/foobar.php匹配正则表达式.+.php和\ 1的值变为foobar.php,因为正则表达式周围的().

稍微复杂一点:

/(.+)/(.+)\.php$
Run Code Online (Sandbox Code Playgroud)

/foo/bar.php的值将匹配此正则表达式,\ 1将等于'foo'[因为它是正则表达式中的第一个组]而\ 2将等于'bar'[因为它是第二个组].

请注意,此正则表达式与/foobar.php不匹配.

您也可以这样做,以便URL不需要包含.php.

- url: /(.+)
  script: \1.php
Run Code Online (Sandbox Code Playgroud)

通过使用static_dir,您无需进行分组,因为它将匹配目录中的任何文件.

如果你想匹配你可以使用的*.html文件

- url: /Client_Pages/(.*)\.html$
  static_files: Client_Pages/\1.html
  upload: Client_Pages/*\.html$
Run Code Online (Sandbox Code Playgroud)

最后,app.yaml要记住的事情是它从上到下处理规则,并执行第一个匹配并停止处理.

所以app.yaml喜欢

- url: /.*
  script: index.php

- url: /(.+)\.html
  static_dir: html_pages
Run Code Online (Sandbox Code Playgroud)

始终执行index.php,因为第一个正则表达式将匹配任何incomming URL.