1

我正在使用带有 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页面,但这不适用于 HTML 页面,为什么?

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

我有事要干。这将加载我的页面PHPHTML页面:

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

- url: /Client_Pages
  static_dir: Client_Pages

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

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

4

1 回答 1

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,因为第一个正则表达式将匹配任何传入的 URL。

于 2014-03-05T00:49:27.410 回答