我想避免在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;
}
}
答案 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内容,但这不适用于此处。