我们正在生成一个仅由静态文件组成的网站(使用集合)。
URL 上带有 .html 扩展名看起来太过时了,所以我们在自己的目录中生成每个静态 HTML 文件,并将其命名为 index.html。例如,urlhttp://www.example.com/foo/bar/在文件中/var/www/foo/bar/index.html
。
这种方法效果很好,但是有一个小问题困扰着我:现在有两个可能的 URL 指向同一个资源:
- http://www.example.com/foo/bar/(斜线网址)
- http://www.example.com/foo/bar/index.html(index.html 网址)
有人可能会意外地链接到 index.html 形式的 URL,这不利于 SEO 并且看起来很丑陋(还记得九十年代吗?)。
Nginx 是否可能在 index.html URL 上给出 404 错误,但提供斜线 URL?
我尝试过这个:
location ~ /index\.html$ {
return 404;
}
但似乎 Nginx 对斜线 URL 进行了一些内部重写,将其改为 index.html URL,然后匹配该位置,因此即使在斜线 URL 上我们也得到了 404。
请注意,为了捕获错误,我们希望 index.html URL 成为错误,而不仅仅是重定向到斜线 URL。
答案1
index.html 有一个内部重定向,因为它是默认的index
;/
请求重定向到/index.html
该重定向设置为返回 404。
您可以检查ngx_http_index_module 文档以便更好地理解。您的案例已记录在案。
解决您的问题的一种方法是重命名所有文件名index.html
并将foo.bar
该文件名添加为默认值index
location / {
index foo.bar;
}