我正在尝试创建重定向以添加尾部斜杠,
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
(可能是打字错误)......或者可能是因为您有其他指令,所以您没有向我们显示覆盖这个的指令。