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

     相关文章
  • 相关阅读:
    宿主机无法访问CentOS7上Jenkins服务的解决办法
    415. Add Strings
    367. Valid Perfect Square
    326. Power of Three
    258. Add Digits
    231. Power of Two
    204. Count Primes
    202. Happy Number
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/cfinder010/p/5850198.html
Copyright © 2011-2022 走看看