想知道是否有具有 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;
}