zoukankan      html  css  js  c++  java
  • nginx url自动加斜杠的问题

    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了,不再需要指定了。

     相关文章
  • 相关阅读:
    一个Java对象到底占用多大内存
    Java 动态代理机制分析及扩展
    JVM内幕:Java虚拟机详解
    深度分析 Java 的 ClassLoader 机制(源码级别)
    Java异常的深入研究与分析
    HashMap的工作原理
    Java枚举常见7种用法
    left join 过滤条件写在on后面和写在where 后面的区别
    mysql left( right ) join使用on 与where 筛选的差异
    SQL索引优化
  • 原文地址:https://www.cnblogs.com/cfinder010/p/5850198.html
Copyright © 2011-2022 走看看