这是我网站的文件结构:
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/
or /home/
),它应该在该文件夹中查找index.html
- 如果调用任何文件夹时没有尾随斜杠(例如
/scripts/page/1
or /home
),它应该在该文件夹中查找index.html
- 如果有任何文件(比如
/css/styles.css
or /prereqs.zip
) 被调用,它应该返回文件
区分文件和文件夹的方法可能是简单地检查是否有句点(.),因为我的所有文件都有扩展名。尽管我猜想其他人也可能会受益于处理无扩展名文件的解决方案。
我尝试了许多不同的正则表达式,它们似乎都遗漏了某些情况。还尝试了之前关于 stackoverflow 的问题中提出的所有解决方案,几乎都是同样的事情。
我并不是在寻找为我的网站量身定制的 app.yaml,这可以通过手动处理每个文件夹、案例等来完成。
我正在寻找一个通用解决方案将完全按照传统网络托管服务的方式工作,因为我猜这也会使其他人受益。然后我就可以自由添加/更改内容/结构,而不必每次都更新 app.yaml。
附:老实说,谷歌应该自己提供解决方案,但他们没有。我猜即使是合适的网络开发人员也不是正则表达式大师。
P.S.2 该网站是使用 Hugo 静态站点生成器制作的。我可以确认它正在传统的网络主机 (GoDaddy) 上运行。另外,我不知道足够的 html/css/js 来确定该网站的实际内部工作是什么;如果需要我可以提供源文件。
您无法通过完全静态的网站在(标准环境)GAE 上实现所有这些。这是因为您无法提前告知(即在创建 app.yaml 配置时)是否/some/path/item
是一个文件或文件夹,因此/some/path/item
or /some/path/item/index.html
应分别退回。
这不是编写正确的正则表达式的问题,而是想要 2不同的结果为same regex.
为了实现您想要的目标,您需要应用程序在运行时检查条件并做出决定 - 不再是静态站点。
如果你放弃了第二颗子弹,你可以通过以下方式完成剩下的事情:
- 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)