为静态html网站的谷歌应用引擎配置适当的app.yaml处理程序



这是我的网站的文件结构:

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

基本上我需要确保以下内容:

  • 如果任何文件夹被用尾部斜杠(比如/scripts/page/1//home/)调用,它应该在该文件夹中查找index.html
  • 如果调用任何文件夹时没有尾部斜杠(比如/scripts/page/1/home),它应该在该文件夹中查找index.html
  • 如果调用了任何文件(比如/css/styles.css/prereqs.zip),它应该返回该文件

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

我尝试了许多不同的正则表达式,所有这些正则表达式似乎都漏掉了一些情况。还尝试了之前关于stackoverflow的问题中提出的所有解决方案。

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

我正在寻找一个通用解决方案,它将与传统网络主机的工作方式完全一样,因为我猜这也会对其他人有利。然后我可以自由添加/更改内容/结构,而不必每次都更新app.yaml。

第页。老实说,谷歌本应该自己提供解决方案,但他们没有。我猜即使是合适的web开发人员也不是regex大师。

第页。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/1/index.html
upload: public/.*/index.html
- url: /(.*)$
static_files: public/1
upload: public/.*

如果你有办法区分文件和文件夹,你可能会想出一个方案。例如,通过指定所有文件名都必须有扩展名(目录名称中不能有.),您可以执行以下操作:

# /optional/path/folder/ - serve index.html inside
- url: /(.*)/
static_files: public/1/index.html
upload: public/.*/index.html     
# /optional/path/name.extension => files - serve them
- url: /((.*/)*[^/]+.[^/]+)$
static_files: public/1
upload: public/.*
# anything else is a folder - serve index.html inside
- url: /(.*)$
static_files: public/1/index.html
upload: public/.*/index.html

最新更新