使用 nginx 提供 URL 以斜杠结尾的页面

使用 nginx 提供 URL 以斜杠结尾的页面

我想让 nginx 为 提供 HTML 文件/foobar/。我尝试了 2 种配置,但都没有用。

在 Apache 中你可以这样做:

AliasMatch ^/foobar/$ /home/admin/foobar/foobar.html

我的第一次尝试:

location /foobar/ {
    alias /home/admin/foobar/foobar.html;
}

/foobar/显示 500 错误页面。错误日志显示:

2011/08/05 04:12:35 [alert] 32465#0: *1 "/home/admin/foobar/foobar.htmlindex.html" is not a directory, ...

这很奇怪。为什么它会将“index.html”附加到文件路径的末尾?

我的下一次尝试:

location ~ ^/foobar$ {
    alias /home/admin/foobar/foobar.html;
}

转到/foobar使我的浏览器下载该文件。这很奇怪。为什么会发生这种情况?

我能够用这个让它工作:

location /foobar.html {
    alias /home/admin/foobar/foobar.html;
}

可以,但是 URL 错误。它有/foobar.html而不是/foobar/

我该怎么做呢?

答案1

附加“index.html”的原因是由于指数指令(可能在你的主 nginx.conf 文件中)

它通常读起来类似以下内容:

index index.php index.htm index.html

它告诉 nginx 在被要求提供目录服务时该做什么(在上面的例子中,尝试提供目录index.php,如果不存在则尝试提供目录index.htm,等等)

您可以做的是,如果这是特殊情况,则在位置块内添加额外的索引指令,或者如果您始终希望foobar.html为任何目录提供服务,请更改主索引指令。

例如(仅覆盖一个特定位置的索引):

location /foobar/ {
    index foobar.html;
}

如果位置块外的索引指令可以实现这一点,那么就不要在每个位置块中都放置索引指令。

相关内容