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这样一个链接,就会重定向到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了,不再需要指定了。

以上所述是小编给大家介绍的nginx url自动加斜杠及301重定向的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • nginx中域名、目录的301重定向配置示例

    301重定向不陌生, 有时候有需求把某目录整个重定向到一个二级域名,或者不带www的顶级域名请求全部重定向到带www的二级域名.如果是Apache,需要配置.htaccess,nginx不支持,需要在配置文件里面使用rewrite指令来实现. 顶级域名重定向到www 复制代码 代码如下: server {  server_name jb51.net;  rewrite ^/(.*)$ http://www.jb51.net/$1 permanent;  } 如上配置,所以jb51.net的请求都

  • Nginx下301重定向域名的方法小结

    linux中nginx 301重定向跳转方法总结,有需要的朋友可参考一下. 第一种情况:访问aaaaaaa站定向到bbbbbbbbbbb站 复制代码 代码如下: server { server_naaaaaaame www.aaaaaaa.com ; rewrite ^(.*) http://www.bbbbbbbbbbb.com$1 permaaaaaaanent; } 第二种情况:不是访问aaaaaaa站的全部重定向到指定页面 复制代码 代码如下: server { server_naaaa

  • Nginx下配置301重定向的正确方法例子

    之前给nginx做301重定向的时候经常会这样写: 复制代码 代码如下: server {     listen       80;     server_name  www.jb51.net jb51.net;     if ($http_host = www.jb51.net) {         rewrite  (.*)  http://jb51.net$1;     }     ... } 实际标准的写法应该是 复制代码 代码如下: server {     listen      

  • 详解 Nginx 301重定向的配置

    详解 Nginx 301重定向的配置 301重定向是很常见的需求,比如访问 nowamagic.net,自动跳到 www.nowamagic.net.或者倒过来,访问 www.nowamagic.net 跳到 nowamagic.net.Nginx 中配置 301 重定向(301 redirect)很容易,下面介绍下方法. 打开 nginx.conf 文件,找到你的 server 配置段: server { listen 80; server_name nowamagic.net www.now

  • ngin配置301重定向设置方法和nginx子目录301重定向

    nginx版本为1.1.19. 若域名由a.com转移到了b.com,并对两个域名有所有权,可以: 复制代码 代码如下: server{ server_name a.com;    return 301 $scheme://b.com$request_uri;} 重启服务器,然后看一下成功与否: 复制代码 代码如下: curl -I a.com nginx子目录301重定向设置方法 如我想把www.b.com/bfiles/download/转向到dx1.b.com:81/bfiles/down

  • 详解Nginx几种常见实现301重定向方法上的区别

    Nginx下常见的301跳转有以下三种,虽然都能达到同样的目的.但是三种写法上还是有区别的,主要的区别是在正则匹配的性能上. 第一种:使用rewrite指令,通过正则匹配所有的URI后再去掉开头第一个/(反斜线). rewrite ^/(.*)$ https://www.hi-linux.com/$1; 第二种:同样使用rewrite指令,不同的是通过$request_uri变量匹配所有的URI. rewrite ^ https://www.hi-linux.com$request_uri? p

  • 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:8

  • 配置解决Nginx服务器中WordPress路径不自动加斜杠问题

    问题是这样的:我习惯在博客地址后面直接加"wp-admin"敲回车进入WordPress后台,但是进去以后发现不管我点任何一个管理子项,一律404(找不到页面),瞬间我就囧了,这是神马状况... 仔细看了一下管理子项的链接,发现他们全是类似"//www.jb51.net/blog/edit.php"这样的,关键就在于他们都少了"/wp-admin/"这条路径,路径都不对了,肯定404呗... 知道问题在哪就简单了,而且答案肯定还是在Nginx的重

  • 详解Nginx proxy_pass的一个/斜杠引发的血案

    背景 一个nginx的server模块下需要proxy到两个server,所以就通过location的不同路径来区分转发到不同的服务器上. 一开始是这么写的 location / { proxy_pass http://server1/; } location /index { proxy_pass http://server2/; } 但是忘记了server1上有个服务路径是/indexNew,结果就被proxy到了server1,出现404问题,然后紧急修改配置如下: location /i

  • PHP中让json_encode不自动转义斜杠“/”的方法

    前言 最近将使用爬虫爬取的链接保存到 mysql 数据库中时,发现我将链接使用 json_encode 保存时候,在数据库中却显示了转义字符,我并不需要这转义的,看起来不清晰而且占用存储空间. 后来发现在默认的情况之下使用 json_encode 对数组进行 json 格式的转换时候会自动的将数据中含有斜杠的字符串进行转义,但是我们往往有的时候不需要药对它们进行转义的,本文说说如何使用 json_encode 不自动转义斜杠. 对于如下数组 $a,现有两种办法解决: $a = array( 'h

  • PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号

    最近发现做一个php程序表单数据提交写入数据库的内容中只要是带有单引号或者双引号的内容时,后面都会增加一个反斜杠.而且每保存一次增加一个反斜杠,很是郁闷. 于是从网上搜了一下原来是PHP程序为了防止注入或者溢出,通过PHP 指令 magic_quotes_gpc自动在双引号.单引号.反斜杠.NULL前面添加反斜杠. 默认PHP 指令 magic_quotes_gpc是on的,也就是打开的.这时候就可以用stripslashes() 函数删除自动添加的反斜杠.用法就是:比如包含字符串的变量是$st

  • 处理php自动反斜杠的函数代码

    复制代码 代码如下: //处理php自动反斜杠 if (get_magic_quotes_gpc()) { function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $_POST = array_map('stripslashes_deep', $_POST); $_

  • php让json_encode不自动转义斜杠“/”的方法

    hp中怎么让json_encode不自动转义斜杠"/"?下面本篇文章给大家介绍一下PHP中让json_encode不自动转义斜杠"/"的方法. 最近将使用爬虫爬取的链接保存到 mysql 数据库中时,发现我将链接使用 json_encode 保存时候,在数据库中却显示了转义字符,我并不需要这转义的,看起来不清晰而且占用存储空间. 后来发现在默认的情况之下使用 json_encode 对数组进行 json 格式的转换时候会自动的将数据中含有斜杠的字符串进行转义,但是我

  • PHP在特殊字符前加斜杠的实现代码

    复制代码 代码如下: <?php $zongzi = "asdfasdf(asdfasdf?asfdadsf)"; echo $zongzi = quotemeta($zongzi); echo "<br />"; $zongzi = stripslashes($zongzi); echo $zongzi; ?> PHP quotemeta() 函数 定义和用法 quotemeta() 函数在字符串中某些预定义的字符前添加反斜杠. 这些预定义

  • PHP实现表单提交时去除斜杠的方法

    本文实例讲述了PHP实现表单提交时去除斜杠的方法.分享给大家供大家参考,具体如下: <html> <head> <title>HTML 表单</title> </head> <body> <form action="" method="POST"> 请输入一个字符串: <input type="text" size="30" name=&

  • nginx中斜杠(/)详解

    不知大家日常在nginx配置时,是不是会对是否加斜杠充满疑惑? 配置location.proxy_pass时,加“/”与不加“/”的区别,今天我们通过实操去验证下. 通过nginx代理访问地址:http://127.0.0.1/v1/pt/apply/page location.proxy_pass都不加斜杠 location /v1 {     proxy_pass http://127.0.0.1:8899; } 实际访问代理地址:http://127.0.0.1:8899/v1/pt/ap

随机推荐