Nginx 在不重写的情况下添加尾部斜杠

Nginx 在不重写的情况下添加尾部斜杠

我正在尝试创建重定向以添加尾部斜杠,

location / {
  if($request_uri ~ ^([^.]*[^/])$){
    return 301 https://$host$request_uri/;
  }
}

我不知道如何进行匹配,当我简单地用 / 创建重定向时 - 它可以起作用,只是这个正则表达式似乎被破坏了。

更新

重写我试过

location / {
  rewrite ^([^.]*[^/])$ $1/ permanent;
  .....
}

if ($http_x_forwarded_proto != "https") {
  return 301 https://$host$request_uri;
}

运行良好,重定向到 https,我也想用它创建正则表达式

答案1

很久以前就解决了,但是我看到很多人检查了这个问题,所以如果我没记错的话,我没有这行代码,它正在重定向我:

port_in_redirect off;

我知道,我没有提到有问题的端口,不可能回答,但如果有人遇到同样的问题,我就会把它留在这里

答案2

如果我理解正确的话,你想自动提供服务,而不使用 301 重定向,http://example.com/foo/index.html当请求http://example.com/foo没有尾部斜杠?

如果是这样,我发现这个 try_files 配置可以工作:

try_files $uri $uri/index.html $uri/ =404;
  • 第一个$uri与 uri 完全匹配
  • 第二个$uri/index.html匹配包含 index.html 的目录,其中路径的最后一个元素与目录名称匹配,没有尾随斜杠
  • 第三个$uri/匹配目录
  • =404如果前面的模式都不匹配,则第四个返回 404 错误页面。

答案3

这似乎按预期工作:

location / {
    if ($request_uri ~ ^([^.]*[^/])$) {
        return 301 https://$host$request_uri/;
    }
    try_files $uri $uri/ /index.html;
    ....
}

不确定您是否看到了与您尝试过的那个的区别,除了由于语句中缺少空格而应该遇到的语法错误if(可能是打字错误)......或者可能是因为您有其他指令,所以您没有向我们显示覆盖这个的指令。

相关内容