如何在NGINX中提供静态html文件?

tuwxkamq  于 2023-02-07  发布在  Nginx
关注(0)|答案(1)|浏览(247)

我试图在NGINX中提供一些静态html文件,文件夹和文件命名约定如下。

/root/level-1/
/root/level-1a/
/root/level-1b/
/root/level-1.html
/root/level-1a.html
/root/level-1b.html
/root/level-1/foo.html
/root/level-1a/foo.html
/root/level-1b/foo.html

/root/level-1/level-2/
/root/level-1/level-2a/
/root/level-1/level-2b/
/root/level-1/level-2.html
/root/level-1/level-2a.html
/root/level-1/level-2b.html
/root/level-1/level-2/foo.html
/root/level-1/level-2a/foo.html
/root/level-1/level-2b/foo.html

我的html中的所有路径看起来都像这样。

<a href="/root/level-1">
<a href="/root/level-1a">
<a href="/root/level-1b">
<a href="/root/level-1/foo">
<a href="/root/level-1a/foo">
<a href="/root/level-1b/foo">

<a href="/root/level-1/level-2">
<a href="/root/level-1/level-2a">
<a href="/root/level-1/level-2b">
<a href="/root/level-2/foo">
<a href="/root/level-2a/foo">
<a href="/root/level-2b/foo">

etc...

我试图让NGINX意识到,当我有一个类似于/root/level-1的URL时,它应该尝试文件/root/level-1.html或/root/level-1/level-2,它尝试/root/level-1/level-2.html或/root/level-1/level-2a/foo,它尝试/root/level-1/level-2a/foo.html
这是我为我的位置设置所设置的,我特别尝试针对“根”位置。

location ~ ^/root/.*$ {
  try_files $uri.html $uri $uri/ =404;
}

现在,当我尝试http://localhost/root/level-1时,我得到了一个403禁止,我浏览器中的URL最终看起来像这样“http://localhost/root/level-1/”(URL现在在它的结尾有一个正斜杠)。
我已经尝试了几种组合,但我认为我错过了NGINX正在做什么和我需要告诉它在我的情况下做什么的核心理解。
有人能帮忙吗?

7d7tgy0s

7d7tgy0s1#

这让我有99%的把握

location ~ ^(?<path>/.*/)(?<file>[^/]+)/$ {
  try_files $uri $path$file.html $uri/ =404;
}

这个URL是工作/root/level-1/level-2,但如果我然后试图获得/root/level-1/level-2/foo它不尝试和读取/root/level-1/level-2/foo.html我得到一个404错误.
我应该补充的是,/root/level-1/level-2中没有foo文件夹,只有/root/level-1/level-2/foo.html
我很高兴听到那些比我更熟练的人说这个解决方案可以改进。

相关问题