Nginx实战案例—Rewrite 规则

1. Rewrite规则

Rewrite规则可以实现对url的重写,以及重定向

nginx官方文档:
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

作用场景:

  • URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等
  • SEO优化
  • 维护:后台维护、流量转发等
  • 安全

2. 重定向

2.1 什么是重定向

就是地址A跳转到地址B。

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)

2.2 什么时候需要重定向

  • 网站调整(如改变网页目录结构)
  • 网页被移到一个新地址
  • 网页扩展名改变(如应用需要把.php改成.html)

这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等

3. 301和302

3.1 什么是301和302

通过一个例子来了解它:

curl -I www.taobao.com
curl -I taobao.com

在这里插入图片描述

301 redirect: 301代表永久性转移(Permanently Moved)
302 redirect: 302代表暂时性转移(Temporarily Moved )

3.2 共同点和不同点

  • 共同点:
    301和302状态码都表示重定向,就是说浏览器在到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)
  • 不同点:
    301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了) ,搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址

3.3 什么时候进行301或者302跳转

  • 当一个网站或者网页24/48小时内临时移动到一个新的位置,这时候就要进行302跳转。
    打个比方说:我有一套房子,但是最近走亲戚去亲戚家住了,过两天我还回来的
  • 而使用301跳转的场景就是之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的。
    就比如你的那套房子其实是租的,现在租期到了,你又在另一个地方找到了房子,之前租的房子不住了

3.4 使用301跳转的场景

  • 域名到期不想续费(或者发现了更适合网站的域名),想换个域名
  • 在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪个
  • 空间服务器不稳定,换空间的时候

3.5 尽量使用301跳转

举个例子:

从网站A (网站比较烂)上做了一个302跳转到网站B (搜索排名很靠前) ,这时候有时搜索引擎会使用网站B的内容,但却收录了网站A的地址。这样在不知不觉间,网站B在为网站A作贡献,网站A的排名就靠前了

而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”

4. Rewrite 规则

rewrite		<regex>		<replacement>		[flag];
关键字		 正则			替代内容			flag标记     	

关键字:其中关键字不能改变
正则:perl兼容正则表达式语句进行规划匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记

falg标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URL规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重点向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

例子:

rewrite	 ^(.*)$   /pages/test.html  break;

会把所有的请求都重定向到 /pages/test.html 页面

5. www.westos.org—https://www.westos.org

修改配置文件:

vim /usr/local/nginx/conf/nginx.conf

124 server {
125         listen 80;
126         server_name www.westos.org;
127         rewrite ^/(.*)$ https://www.westos.org/$1;     ##$1表示用户在这里输入的内容保留,只会重定向$1前面的内容
128         #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;    ##永久重定向(可以缓存,临时的不允许缓存)
129			}

nginx -t			#语法检测
nginx -s reload		#在不暂停服务的情况下重新加载

在这里插入图片描述
测试:

搜索www.westos.org	页面跳转到https://www.westos.org
搜索www.westos.org/test.html 跳转到https://www.westos.org/test.html

在这里插入图片描述

在这里插入图片描述

注意:
1.404:虽然它下面没有test.html这个文件,但是它仍然会重定向到https://www.westos.org/test.html(即$1表示用户在这里输入的内容保留,只会重定向$1前面的内容)

2.^/(.*)$为匹配所有,即匹配www.westos.org;

6. 访问www.westos.org并且以bbs结尾的—https://bbs.westos.org

必须是以bbs结尾才能匹配到

修改配置文件:

vim /usr/local/nginx/conf/nginx.conf


106     server {
107         listen       443 ssl;
108         server_name  www.westos.org bbs.westos.org;


119         #location / {
120         #    root   /web;
121         #    index  index.html index.htm;
122         #}
123         localtion / {
124                 root /bbs;
125                 index  index.html index.htm;
126         }
127     }
128     server {
129         listen 80;
130         server_name www.westos.org;
131         #rewrite ^/(.*)$ https://www.westos.org/$1;     ##$1表示用户在这里输入的内容保留,只会重定向$1前面的内容
132         #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;   ##永久重定向(可以缓存,临时的不允许缓存)   
133         rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;	##表示访问www.westos.org并且以bbs结尾的,都定向到https://bbs.westos.org
134         }

在这里插入图片描述

在这里插入图片描述

cd /usr/local/nginx/conf/
mkdir /bbs
vim /bbs/index.html
cat /bbs/index.html
nginx -t			#语法检测
nginx -s reload		#在不暂停服务的情况下重新加载

在这里插入图片描述
在真机中添加解析:

vim /etc/hosts

在这里插入图片描述

测试:

bbs.westos.org #查看到的是server1,这是因为我们在配置文件中写好的默认发布页面内容为server1
https://bbs.westos.org/ #添加证书后,查看到/bbs里的默认发布内容
www.westos.org/bbs #页面会自动跳转到https://bbs.westos.org/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值