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

导读: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这样一个链接,就会重定向到/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://fengbin2005.iteye.com/blog/2385125

后面有更多链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx 301重定向死循环是指在使用nginx进行301永久重定向时,由于配置错误或者逻辑问题导致请求在重定向过程中陷入无限循环的情况。 通常情况下,nginx301重定向是通过配置server块中的location指令来实现的。当客户端发送请求时,nginx会根据配置的location规则进行匹配,并将匹配到的请求重定向到指定的URL。 如果配置的重定向规则存在问题,比如将请求重定向到了自身或者循环重定向到其他URL,就会导致死循环的情况发生。例如,以下是一个可能导致死循环的nginx配置示例: ``` server { listen 80; server_name example.com; return 301 http://example.com; } ``` 在这个示例中,无论客户端请求任何URLnginx都会将其重定向到http://example.com。这样就会导致请求不断地被重定向,从而形成死循环。 为了避免nginx 301重定向死循环,需要确保重定向规则正确配置。可以通过以下几种方式来解决问题: 1. 检查重定向规则:仔细检查nginx配置文件中的重定向规则,确保没有将请求重定向到自身或者形成循环重定向的情况。 2. 使用301重定向的目标URL:在配置重定向规则时,确保将请求重定向到一个有效的URL,而不是一个无效的URL或者自身。 3. 使用302临时重定向:如果无法确定正确的重定向规则,可以暂时使用302临时重定向代替301永久重定向,以避免死循环的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值