这是我网站的文件结构:
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。
P.S。老实说,谷歌应该自己提供解决方案,但事实并非如此。我猜想即使是合适的Web开发人员也不是正则表达式大师。
P.S.2该网站是使用Hugo静态网站生成器创建的。我可以确认它可以在传统的网络主机(GoDaddy)上运行。我也不知道足够的html / css / js来确定该网站的实际内部工作是什么;如果需要,我可以提供源文件。
答案 0 :(得分:2)
您无法使用完全静态的网站在(标准环境)GAE上实现所有这些功能。那是因为您无法提前告知/some/path/item
是文件还是文件夹(例如,在创建app.yaml配置时),因此应分别返回/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