针对静态 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
基本上我需要确保以下几点:
- 如果任何文件夹以尾部斜线调用(比如
/scripts/page/1/
或 /home/
),它应该在该文件夹内寻找 index.html
- 如果调用任何文件夹时没有尾部斜杠(例如
/scripts/page/1
或 /home
),它应该在该文件夹中查找 index.html
- 如果调用任何文件(例如
/css/styles.css
或 /prereqs.zip
),它应该 return 文件
区分文件和文件夹的方法可能是简单地检查是否有句点 (.),因为我的所有文件都有扩展名。尽管我猜想其他人也可能会从处理无扩展文件的解决方案中受益。
我尝试了多种不同的正则表达式,它们似乎都遗漏了某些情况。还在几乎相同的事情上尝试了之前关于 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
这是我网站的文件结构:
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
),它应该 return 文件
区分文件和文件夹的方法可能是简单地检查是否有句点 (.),因为我的所有文件都有扩展名。尽管我猜想其他人也可能会从处理无扩展文件的解决方案中受益。
我尝试了多种不同的正则表达式,它们似乎都遗漏了某些情况。还在几乎相同的事情上尝试了之前关于 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