Nginx:禁止 URL 中出现 index.html

Nginx:禁止 URL 中出现 index.html

我们正在生成一个仅由静态文件组成的网站(使用集合)。

URL 上带有 .html 扩展名看起来太过时了,所以我们在自己的目录中生成每个静态 HTML 文件,并将其命名为 index.html。例如,urlhttp://www.example.com/foo/bar/在文件中/var/www/foo/bar/index.html

这种方法效果很好,但是有一个小问题困扰着我:现在有两个可能的 URL 指向同一个资源:

  1. http://www.example.com/foo/bar/(斜线网址)
  2. 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;
}

相关内容