博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx url自动加斜杠的问题
阅读量:6236 次
发布时间:2019-06-22

本文共 1960 字,大约阅读时间需要 6 分钟。

nginx url自动加斜杠问题及301重定向

时间:2016-02-04 15:14:28来源:网络
导读:nginx url自动加斜杠问题及301重定向,URL指向一个目录并且在最后没有包含斜杠,会301重定向跳转,添加server_name或修改访问重定向。
 
nginx url自动加斜杠问题及301重定向

内部服务器使用nginx,做网站测试之用。不同域名使用端口号区分,如www用默认的80端口,其它域名用81,82...

有时直接在地址栏敲网址,会发现跳转到localhost.localdomain的情况。

比如858端口下有个hx目录,这样正常访问:http://192.168.1.158:858/hx/

但如果少打了一个/,如:http://192.168.1.158:858/hx
就会自动跳转到:http://localhost.localdomain:858/hx/

经分析是nginx自动加斜杠的问题:

在某些情况下(具体可参考 wiki.nginx.org),Nginx 内部重定向规则会被启动。
例如,当URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301 重定向,这时会有两种情况:
 

1、server_name_in_redirect on(默认),URL 重定向为: server_name 中的第一个域名 + 目录名 + /;
2、server_name_in_redirect off,URL 重定向为: 原 URL 中的域名 + 目录名 + /。
If server_name_in_redirect is on, then Nginx will use the first value of the server_name directive for redirects. If server_name_in_redirect is off, then nginx will use the requested Host header.

原配置,没有加server_name:

 

server {
    listen  858;
}

修改后:

 

server {
    listen  858;
    server_name 192.168.1.158;
}
或:
server {
    listen  858;
    server_name_in_redirect off;
}

此问题解决。访问http://192.168.1.158:858/hx可以正常跳转到http://192.168.1.158:858/hx/了。

分析:

服务器的hostname是localhost.localdomain,当没有设置server_name时,server_name就变成hostname了。
默认又是server_name_in_redirect on,因此原配置访问hx目录时,会重定向到localhost.localdomain/hx/了。
第一种修改方法,加了server_name,那就跳转到server_name + 目录名 + /,对了。
第二种修改访问,重定向为:访问的URL+目录名+/,也对了。

泛解析配置:

 

server{
    listen 80;
    server_name _;
}
 

如果有个phpcheck目录,有人不小心链了http://www.plchome.org/phpcheck这样一个链接,就会重定向到http://_/phpcheck/。

所以这种在没法指定server_name的情况下,要加上server_name_in_redirect off。
 

server{
    listen 80;
    server_name _;
    server_name_in_redirect off;
}
 

这时,访问www.plchome.org/phpcheck,就会自动并且正确的跳转到www.plchome.org/phpcheck/了。

晚上升级一台服务器的nginx版本时,在changes里看到:

 

Changes with nginx 0.8.48   03 Aug 2010

    *) Change: now the "server_name" directive default value is an empty 

       name "".
       Thanks to Gena Makhomed.

    *) Change: now the "server_name_in_redirect" directive default value is 

       "off".

从nginx 0.8.48起server_name_in_redirect已经默认为off了,不再需要指定了。

 
相关文章

转载地址:http://flzia.baihongyu.com/

你可能感兴趣的文章
希尔排序(Golang)
查看>>
修改grub背景图
查看>>
netapp日志中hw_assist: hw_assist functionality is inactive.排错
查看>>
SaltStack实战之配置管理-状态间关系
查看>>
sc 与net命令的区别
查看>>
2018年区块链五大关键趋势预测:区块链与物联网结合有望突破
查看>>
delphi webservices传数据
查看>>
CentOS7离线安装docker问题解决
查看>>
moss 2007内容类型,如文档库设定新建xx菜单
查看>>
saltstack设置minion分组
查看>>
汇编和反汇编的区别
查看>>
ESXI主机网络负载均衡(基于portID,MAC,IP HASH)
查看>>
把视图查询权限授予普通用户
查看>>
json相关
查看>>
ORA-04036: 实例使用的 PGA 内存超出 PGA_AGGREGATE_LIMIT
查看>>
LAMP__discu安装_5
查看>>
重新启动apache报如下错误:
查看>>
统计字符串在文件中出现的次数
查看>>
PCMS V9多栏目多推荐位调用数据列表方法
查看>>
Linux 使用 cp 命令强制覆盖功能
查看>>