Nginx 访问子目录时,不加/出现301重定向的问题
现在手上有一个项目,分为前台(ibms)和后台(opc)两部分,使用IP和端口进行访问测试,使用http://192.168.100.10:7000时访问前台,使用http://192.168.100.10:7000/admin访问后台,nginx配置规则如下:server {listen80;server_namelocalhost;location / {root /srv/app/ibms;
·
现在手上有一个项目,分为前台(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;
即可解决,最后不要忘记了重新加载配置文件。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)