如何将301重定向到以Nginx斜杠结尾的URL



我有一个nginx web服务器,它代理将流量传递到局域网上的不同服务。在最近更新了其中一个服务后,重定向将按预期停止工作。重定向背后的服务是Pi Hole,所以我不能/也不能修改web服务的工作方式。我只想修复重定向。

我实际的nginx配置如下:

server {
listen 80;
listen [::]:80;
server_name servername.xyz localhost default;
access_log /var/log/nginx/servername-xyz.access.log;
error_log /var/log/nginx/servername-xyz.error.log;
location = /pihole {
return 301 http://servername.xyz/pihole/admin;
}
location = /pihole/ {
return 301 http://servername.xyz/pihole/admin;
}
location /pihole/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:31480/;
}
location = / {
return 418;
}
}

这种配置运行得很好。每次我在浏览器http://servername.xyz/pihole中写作时,我都会自动重定向到http://servername.xyz/pihole/admin,并开始完美地使用Pi Hole网络控制台。

在Pi Hole的最后一次更新中,他们做了一个小改动,打破了重定向。现在,每次您请求http://pi-hole.domain/admin时,web控制台都会自动重定向到http://pi-hole.domain/admin/注意第二个URL末尾的斜杠。

在我的配置中,这意味着以下行为:

  1. 我向浏览器请求http://servername.xyz/pihole
  2. 我拿到301然后去http://servername.xyz/pihole/admin
  3. 在这里,我从Pi Hole网络控制台得到了一个我意想不到的重定向,它让我转到:http://servername.xyz/admin/注意结束斜杠

当我进入第三步时,重定向不允许我进入Pi Hole网络控制台。我尝试过对规则进行一些更改,但我没有成功实现将301转换为http://servername.xyz/admin/以避免Pi Hole web控制台重定向的目标。

非常感谢Richard的Smith评论。它让我修复了配置文件。现在,文件中的proxy_pass操作看起来像:

location /pihole/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:31480/;
proxy_redirect http://servername.xyz/admin/ http://servername.xyz/pihole/admin/;
}

在包含了proxy_redirect指令之后,事情又开始运转了。

最新更新