Nginx 访问子目录时,不加/出现301重定向的问题
发表于:2023-10-25 |

现在手上有一个项目,分为前台(ibms)和后台(opc)两部分,使用IP和端口进行访问测试,
使用http://192.168.100.10:7000时访问前台,使用http://192.168.100.10:7000/admin访问后台,nginx配置规则如下:

server {
        listen       80;
        server_name  localhost;
        location / {
             root /srv/app/ibms;
             try_files $uri $uri/ @router;
             index index.html;
         }

        location /admin {
             alias /srv/app/opc;
             try_files $uri $uri/ /admin/index.html;
             index index.html;
         }

        location @router {
            rewrite ^.*$ /index.html last;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /usr/share/nginx/html;
        }
}

访问前台一切正常,在访问后台是,如果在URI后面不加上/(http://192.168.100.10:7000/admin)
则会出现自动跳转到301的情况,跳转后域名为http://192.168.100.10/admin/,可以发现端口不见了,在admin后面加上了一个/

通过网上搜集资料整理了下原因:

Nginx 服务中配置指令 absolute_redirect 用来配置重定向的方式。默认开启,为绝对重定向;否则为相对重定向。(假装很明白的样子)

当我们访问URI时;如果访问资源为一个目录,并且URI没有以正斜杠(/)结尾;Nginx 服务就会返回一个301跳转,目标地址就是要加一个正斜杠。

在跳转过程中 server_name_in_redirect 指令设置跳转目标的域名,默认配置为on ,从请求的 header 中获取。否则从配置文件中的 server_name 中获取。

在跳转过程中 port_in_redirect指令设置跳转目录的端口,默认值为on,从 nginx 配置文件中的Listen端口获取。

否则从接受到的请求头信息(header)中获取;如果是 Nginx 版本号大于 1.11.8,可以考虑用 absolute_redirect off;

所以上面的问题,只需在server块中添加 absolute_redirect off;即可解决,最后不要忘记了重新加载配置文件。

上一篇:
免费下载/上传时间计算器
下一篇:
PyPI 软件仓库镜像使用帮助--西安交通大学