龙空技术网

Nginx的rewrite案例之目录自动添加斜杠

零一小李 113

前言:

目前大家对“nginxrewrite带路径”都比较讲究,咱们都想要知道一些“nginxrewrite带路径”的相关资讯。那么小编在网络上汇集了一些对于“nginxrewrite带路径””的相关内容,希望我们能喜欢,朋友们一起来学习一下吧!

本文讨论,如何对目录自动加/

第一步,打开conf的配置文件

第二步 监听8082端口,配置server_name localhost;内容

root查html目录,index搜索其中的index.html文件

server块 {    listen 8082;    server_name localhost;    location /heima {        root html;        index index.html;    }}

第三步:这里出现了404的错误,错误的原因是因为文件资源寻找需要到 /heima目录下的 html文件的index.html文件,现在没有,找不到出错了

第四步 切换到html页面,创建heima文件,切换,利用>将内容装进去

第五步 利用cat可以查看index.html页面的内容

带个/和不带/的区别是什么?

把/去掉之后,它发送的请求有两个,一个是301短期重定向,一个是200永久重定向

但如果是访问的/访问的路径,最终只有一个请求,就是200

分析:

如果不加斜杠,Nginx服务器内部会自动做一个301的重定向,重定向的地址会有一个指令叫server_name_in_redirec onloff;来决定重定向的地址:

如果该指令为on 重定向的地址为: 目录名/;

如果该指令为off 重定向的地址为: http://原URL中的域名/目录名/;

这句话什么意思?

如果把server_name_in_redirec 设置成了on 路径就会变为了这个路径,会变成localhost

端口未提供服务,就会报错

所以就拿刚才的地址来说, 如果不加斜杠, 那么按照上述规则,如果指令server_name_in_redirect为on,则301重 定向地址变为 ,如果为off,则301重定向地址变为 ttp://192.168.200.133/ht/。后面这个是正常的,前面地址就有问题。

注意server_name_in_redirect指令在Nginx的0.8.48版本之前默认都是 on,之后改成了off,所以现在我们这个版本不需要考虑这个问题,但是 如果是0.8.48以前的版本并且server_name_in_redirect设置为on,我们 如何通过rewrite来解决这个问题?

手动给他改一下,第一步,切换到conf文件下,vim打开配置文件

手动配置,在server_name_in_redirect on中进行打开

打开之后就会出现一个明显的问题,带/就能够正常访问

不带/就不能够正常访问,就转圈圈了,因为它最终会把自己的服务重定向到localhost/heima/

这种情况,主要适用于,目录加/的情况,如果访问的是一个html页面,真实在使用的情况中,只有添加了目录,才最好加/

$host就是自己设置的主机IP,$server_port获取的是8082,加上下面if这句话的意思是主要判断,

index.html,设置的是一个页面,不发生映射跳转

如果是永久重定向,用permanent进行设置

测试经过 192.168.200.133:8082/heima/ 这种带/最终返回了200状态码

如果不带/,会发送一个302和200的状态码,同时下面的内容也多了一个/

为什么多了一个/,原因是下面的$1在匹配的时候,已经匹配了/,所以在URL重定向的路径多了一个/,解决多了/的方法是

将server_port后面/去掉,直接加上$1就好了

最终//的内容消失不见了

标签: #nginxrewrite带路径