我想让 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;
}
如果位置块外的索引指令可以实现这一点,那么就不要在每个位置块中都放置索引指令。