重写所有 .html 扩展名并删除 Nginx 中的索引

重写所有 .html 扩展名并删除 Nginx 中的索引

如何从 Nginx 中的 url 字符串中删除所有 .html 扩展名以及任何出现的 index.html

http://www.mysite/index.htmlhttp://www.mysite http://www.mysite/articles/index.htmlhttp://www.mysite/articles http://www.mysite/contact.htmlhttp://www.mysite/contact http://www.mysite/foo/bar/index.htmlhttp://www.mysite/foo/bar

编辑:这是我的配置文件:

服务器 {

    listen 80;

    server_name staging.mysite.com;
    root /var/www/staging.mysite.com;
    index  index.html index.htm;

    access_log /var/log/nginx/staging.mysite.com.log spiegle;


    #error_page 404         /404.html;
    #error_page 500 503     /500.html;


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

    rewrite ^(.*/)index\.html$ $scheme://$host$1 permanent;
    rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;

    location / {
            rewrite ^/about-us /about permanent                                                                                      
            rewrite ^/contact-us /contact permanent;  

            try_files  $uri.html  $uri/ /index.html;
    }

}

答案1

作为重写(将剥离的 URL 传递到文件系统/后端,而不改变向客户端显示的 URL):

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

或者您可以进行 301 重定向(客户端发出新请求):

rewrite ^(.*/)index\.html$ $scheme://$host$1 permanent;
rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;

答案2

接受的答案似乎对我不起作用。我是一个正在切换的 Apache 用户,因此这可能不会在所有情况下 100% 有效,但这似乎在我的网站上有效(静态 html 页面,只是一个测试):

index index.html;
error_page 404 404.html;
rewrite ^(/.+)\.html$ $1;
try_files $uri.html $uri/ =404;

这使得这种情况发生:

  • url => 正在访问的文件
  • domain.com/ => index.html
  • domain.com/somepage => somepage.html
  • domain.com/arandompage => 404.html

希望这可以帮助其他困惑的前阿帕奇主义者。

相关内容