Nginx 重写规则弄乱了图像

Nginx 重写规则弄乱了图像

想知道是否有具有 nginx 经验的人可以帮助我解决我遇到的重写规则问题。

我想从我的 URL 中删除 .html 和尾随斜杠,因此我将以下代码放入 nginx conf.d 文件中的 server { } 块中:

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

这很有效,但它破坏了我网站上的图片。我将它们放在 Images 文件夹中,因此在我的 HTML 中,它们就像<img src="Images/someImage.jpg">。在添加重写代码之前,它们曾经显示正常,但现在它们无法加载,当我检查它们时,Chrome 控制台显示“无法加载资源:net::ERR_TOO_MANY_REDIRECTS”,旁边还显示http://example.com/Images/404.html

如果有人知道我在这里做错了什么并且可以指出我正确的方向,我将不胜感激!

答案1

有几种不同的方法可以删除 .html 扩展名。其中之一是。

rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent;    # removing .html 
rewrite ^/(.*)/$ /$1 permanent;               # removing Trailing Slashes

我们必须确保 Nginx 知道要查找什么文件,基本上所有带有 .html 扩展名的文件甚至索引文件,例如 index.html 所以最终代码将是这样的。

server { 
        # define you server name listen port etc.
        .......
        .......
        .......

        rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent;    # removing .html 
        rewrite ^/(.*)/$ /$1 permanent;               # removing Trailing Slashes

        # defining index with index.html, you can make it home.html or whatever you like.
        index index.html;                               

        # try getting only html files.
        try_files $uri/index.html $uri.html $uri/ $uri =404; 

        # defining error pages.
        error_page 404 /404.html; 
        error_page 500 502 503 504 /500.html;
}

相关内容