为什么这个配置最终会以 `index.htmlindex.html` url 结束?

为什么这个配置最终会以 `index.htmlindex.html` url 结束?

对于理解这一点的人来说,这可能非常明显,但我已经为此绞尽脑汁几个小时,使用以下配置:

root /var/www/web/public/;

location ~ ^[^.]+?$ {
    default_type text/html;
    alias /var/www/web/public/index.html;
}

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    index index.html;
    try_files $uri $uri/ =404;
}

我最终看到(重点是我)

2016/01/26 18:56:59 [警报] 32364#32364:*1 “/var/www/web/public/index.htmlindex.html“不是目录,客户端:81.82.199.24,服务器:[...].com,请求:“GET / HTTP/2.0”,主机:“[...]”

在我的服务器根目录下。我的目标是让不带.'s 的请求转到index.html,其余的请求只需静态处理即可。

为了更加清楚地说明我的意图:

  • www.example.com/some/page不包含.,因此是页面,应该以index.html(working)结尾
  • www.example.com/some.file包含一个.,因此是一个文件,应该提供相应的文件(工作)
  • www.example.com不包含.,因此是一个页面,最终应该位于index.html(不工作,尝试加载 index.htmlindex.html)

答案1

代替

alias /var/www/web/public/index.html;

alias /var/www/web/public/;

并确保你的主配置中有这个(或类似的)内容,这样 Nginx 就知道在用户请求目录时显示 index.html

index index.php index.htm index.html;

相关内容