这是我的网站的文件结构:
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