针对静态 html 网站的 Google App Engine 的正确 app.yaml 处理程序配置

Proper app.yaml handlers configuration for Google App Engine for a static html website

这是我网站的文件结构:

public
│   404.html
│   app.yaml
│   index.html
│   index.xml
│   prereqs.zip
│   sitemap.xml
│   sof2018.py
|
├───categories
│       index.html
│       index.xml
├───css
│       styles.css
├───home
│       index.html
├───js
│       scripts.js
├───prerequisites
│       index.html
├───scripts
│   │   index.html
│   │   index.xml
│   │
│   ├───page
│   │   └───1
│   │           index.html
│   │
│   └───sof2018
│           index.html
├───tags
│       index.html
│       index.xml
└───usage
        index.html

基本上我需要确保以下几点:

区分文件和文件夹的方法可能是简单地检查是否有句点 (.),因为我的所有文件都有扩展名。尽管我猜想其他人也可能会从处理无扩展文件的解决方案中受益。

我尝试了多种不同的正则表达式,它们似乎都遗漏了某些情况。还在几乎相同的事情上尝试了之前关于 Whosebug 的问题中提出的所有解决方案。

我不是在寻找为我的网站量身定做的app.yaml,这可以通过手动处理每个文件夹、案例等来完成

我正在寻找一种通用解决方案,它可以像传统网络主机一样工作,因为我猜这也会使其他人受益。那我就可以自由add/changecontent/structure不用每次都更新app.yaml

P.S。老实说,google 应该自己提供解决方案,但他们没有。我猜即使是合适的网络开发人员也不是正则表达式大师。

P.S.2 该网站是使用 Hugo 静态站点生成器制作的。我可以确认它正在传统的网络主机 (GoDaddy) 上运行。我也不知道 html/css/js 能确定网站的实际内部工作是什么;如果需要我可以提供源文件。

您无法在(标准环境)GAE 上使用完全静态的网站实现所有这些。那是因为你无法提前告诉(即在创建 app.yaml 配置时)/some/path/item 是文件还是文件夹,因此 /some/path/item/some/path/item/index.html 应该分别被退回。

这不是编写正确的正则表达式的问题,而是想要 相同 正则表达式的 2 不同 结果的问题。

要实现您想要的效果,您需要应用程序在运行时检查条件并做出决定 - 不再是静态站点。

如果你放下第二颗子弹,你可以用这个来完成剩下的:

- url: /(.*)/
  static_files: public//index.html
  upload: public/.*/index.html

- url: /(.*)$
  static_files: public/
  upload: public/.*

如果您有办法区分文件和文件夹,您或许可以想出一个方案。例如,通过指定所有文件名必须有扩展名(并且目录的名称中不能有 .),那么你可以这样做:

# /optional/path/folder/ - serve index.html inside
- url: /(.*)/
  static_files: public//index.html
  upload: public/.*/index.html     

# /optional/path/name.extension => files - serve them
- url: /((.*\/)*[^\/]+\.[^\/]+)$
  static_files: public/
  upload: public/.*

# anything else is a folder - serve index.html inside
- url: /(.*)$
  static_files: public//index.html
  upload: public/.*/index.html