将nginx /index.html重定向到root导致无限重定向

时间:2018-11-03 19:10:40

标签: nginx nginx-location

我想避免在www.example.com和www.example.com/index.html上访问相同的HTML页面,即我想将index.html重定向到根目录。

此:

location = /index.html {
        return 301 $scheme://www.example.com;
}

使我得到ERR_TOO_MANY_REDIRECTS,一个重定向循环。

任何想法都可以更改以使其起作用?

PS,这是我的整个Nginx conf

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include /etc/nginx/snippets/ssl-example.com.conf;
    include /etc/nginx/snippets/ssl-params.conf;

    include /etc/nginx/snippets/letsencrypt-challenge.conf;

    root /var/www/newsite;
    index index.php index.html index.htm;

    server_name www.example.com;

    location / {
            # try_files $uri $uri/ =404;
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location = /index.html {
            return 301 $scheme://www.example.com;
    }
}

1 个答案:

答案 0 :(得分:1)

这不是对该主题的详细处理,而是只是为了回答您的难题的简化解释。答案是您需要放弃尝试做自己正在做的事情。

Web服务器只能提供特定文件,例如xyz.html文件。他们不能提供文件夹。

https://www.example.com/abc/index.html的调用是对Web根目录abc文件夹中的index.html文件的请求。另一方面,对https://www.example.com/abc的调用是对Web根目录的abc文件夹的请求,如上所述,该请求无法提供。

但是,您已经注意到,第二个呼叫导致https://www.example.com/abc/index.html被投放。这是因为通常将Web服务器设置为在不指定要服务的特定文件的情况下调用文件夹时,会生成对该文件夹中index.html文件的重定向,而将其重定向。也就是说,Web服务器在内部将对https://www.example.com/abc的请求转换为对https://www.example.com/abc/index.html的请求。

这就是配置中的index index.php index.html index.htm;行。它说:“如果请求没有指定文件的文件夹,则改为提供index.php文件。如果没有此文件,则提供index.html。如果没有此类文件,则提供index.htm文件。 。如果还不存在,则抛出一个合适的位置

问题是,然后您继续指示您的Web服务器将对https://www.example.com/index.html的请求重定向到https://www.example.com,Web服务器将其重定向回到https://www.example.com/index.html,该请求再次被重定向回到{{1 }}不断循环,直到网络服务器或您的浏览器最终放弃。

您说https://www.example.com的问题是为什么?这样做绝对没有好处,而且您发现,您最终陷入了重定向循环。

您可能正在尝试一些SEO内容,但这不适用于此处。