繁体   English   中英

Google App Engine app.yaml匹配所有PHP文件并匹配所有HTML文件并分别投放

[英]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

我有事情要工作。 这将同时加载我的PHPHTML页面:

- 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM