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

时间:2019-04-29 14:54:03

标签: nginx nginx-config

我想从URL重定向,此处存在真实页面-mysite.com/folder/index.html:

  1. mysite.com/folder/index.html到mysite.com/folder /
  2. mysite.com/folder.html到mysite.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$ $1;
rewrite ^(/.+)\.html$ $1/;

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

也可以尝试使用:

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

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

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

第三个解决方案ERROR_LOOP

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

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

1 个答案:

答案 0 :(得分:0)

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

例如:

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

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


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

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