如何修复从 .html 和 index.html 重定向的 ngnix.conf

How to fix ngnix.conf for redirect from .html and index.html

我想从 url 做重定向,这里有真实页面 - mysite。com/folder/index。html :

  1. 我的网站。com/folder/index。html 到我的网站。com/folder/
  2. 我的网站。com/folder。html 到我的网站。com/folder/
  3. mysite.com/index.html 到 mysite.com

这是我配置的一部分

server_name k.my.net www.k.my.net;

index index.html;
root /var/www/demo/k.my.net/current/public;

rewrite ^(.*/)index\.html$ ;
rewrite ^(/.+)\.html$ /;

location / {   
    try_files $uri $uri/ =404;
}

也尝试使用:

 location / {
    try_files $uri $uri/ @htmlext;
  }

 location ~ \.html$ {
    try_files $uri =404;
 }

 location @htmlext {
   rewrite ^(.*)$ .html permanent;
 } 

第三解ERROR_LOOP

    location ~* ^/([a-zA-Z1-9_-]*/)index\.html$ {
      return 301 ;
    }
    location ~* ^/([a-zA-Z1-9_-]*/?[1-9a-zA-Z_-]*)\.html$ {
     return 301 //;
    }

   location ~* ^/([a-zA-Z1-9_-]*/?[a-zA-Z1-9_-]*)/$ {
     try_files /.html //index.html =404;    
    }

您可以使用正则表达式 location 提取尾随 / 之前的 URI 部分,并使用 try_files 来测试这两个备选方案。有关详细信息,请参阅 this document

例如:

location ~ ^(.*)/$ {
    try_files /index.html .html =404;
}

location也匹配/,这将满足您的第三个要求。


您的 rewrite 语句应该是安全的,但如果它们导致重定向循环,您可能需要用 if 块替换它们并在 $request_uri 中测试原始请求。例如:

if ($request_uri ~ ^([^?]*?)(/index|)(\.html)(\?.*)?$) {
    return 301 /;
}