如何将通用目录请求映射到Google AppEngine中相应的index.html文件?

问题描述 投票:0回答:2

我在 App Engine 中有一个使用默认 app.yaml 文件的静态站点。主 url 处理程序如下所示:

- url: /(.*)
  static_files: www/\1
  upload: www/(.*)

我想直接提出表格的所有请求:

http://mysite/somedirectory
http://mysite/somedirectory/

http://mysite/somedirectory/index.html

有什么好的方法吗?

google-app-engine app.yaml
2个回答
0
投票

对于

http://mysite/somedirectory/
url 模式,你可以有一个像这样的处理程序:

- url: /(.*)/$
  static_files: www/\1/index.html
  upload: www/.*/index.html

当然,这个处理程序必须插入到您已有的 catch-all 处理程序之前。

但是对于

http://mysite/somedirectory
url 模式,事情很棘手,因为您无法判断
somedirectory
是否代表文件并且应该按原样提供服务还是目录,在这种情况下,应该提供相应的
index.html

除非您遵循可用于区分文件和目录的严格规则。例如,如果您知道 all 文件的名称中包含

.
以及其后的文件扩展名,并且 all 目录的名称中没有
.
,那么您可以使用一对如下处理程序:

# a "." in name means a file, serve as-is:
- url: /(.*\/[^\/]*\.[^\/]*)$
  static_files: www/\1
  upload: www/.*

# no "." in name means a directory, serve corresponding index.html:
- url: /((.*))$
  static_files: www/\1/index.html
  upload: www/.*/index.html

由于这对本身成为一个包罗万象的过滤器,因此它应该放在最后(您可能拥有的所有其他处理程序都应该放在它之前),替换您拥有的包罗万象的处理程序。


0
投票

丹的回答让我走上了正轨。它适用于除根目录之外的所有内容。不过,我犯了一个错误,破坏了我原来的版本。这是一个可行的解决方案:

runtime: python39

handlers:

# Special case for the site root directory
- url: /$
  static_files: www/index.html
  upload: www/index.html

# Ending in a slash means a directory, serve corresponding index.html:
- url: /(.*)/$
  static_files: www/\1/index.html
  upload: www/.*/index.html

# Containing a "." means a file, serve as-is:
- url: /(.*\..*)
  static_files: www/\1
  upload: www/.*

# Did not match above, so must be a directory, serve corresponding index.html:
- url: /(.*)
  static_files: www/\1/index.html
  upload: www/.*/index.html

您可以在 https://www.tameware.com

查看正在运行的网站
© www.soinside.com 2019 - 2024. All rights reserved.