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/ (斜杠url)
  2. http://www.example.com/foo/bar/index.html(index.htmlurl)

偶然有人可能链接到URL的index.htmlforms,这是不利于search引擎优化,看起来丑陋(还记得九十年代?)。

是否有可能在Nginx的index.htmlurl404错误,但服务的斜杠url?

我试过这个:

 location ~ /index\.html$ { return 404; } 

但似乎Nginx在内部重写了index.html URL的斜杠URL,然后匹配这个位置,所以我们甚至在斜杠URL上也得到了一个404。

请注意,要发现错误,我们希望index.htmlurl是错误的 ,而不仅仅是redirect到斜杠url。

index.html有一个内部redirect,因为它是默认index ; /请求redirect到/index.html设置为返回404。

您可以检查ngx_http_index_module文档以获得更好的理解。 你的情况被logging在案。

解决您的问题的方法是将所有index.html重命名为foo.bar ,并将该文件名添加为默认index

 location / { index foo.bar; }