• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

【Linux运维架构】Nginx企业实战之rewrite重写规则

Linux架构 lixian 5年前 (2020-03-09) 963次浏览 1个评论 扫描二维码
文章目录[隐藏]

一、rewrite 基本概述

rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。

二、rewrite使用场景

1、地址跳转,用户访问www.drz.com这个URL是,将其定向至一个新的域名mobile.drz.com
2、协议跳转,用户通过http协议请求网站时,将其重新跳转至https协议方式
3、伪静态,将动态页面显示为静态页面方式的一种技术,便于搜索引擎的录入,同时建上动态URL地址对外暴露过多的参数,提升更高的安全性。
4、搜索引擎,SEO优化依赖于url路径,好记的url便于智齿搜索引擎录入

三、rewrite配置语法

Syntax:	rewrite regex replacement [flag];
Default:	—
Context:	server, location, if

#一般用于切换维护场景
rewrite ^(.*)$ /page/404.html last;

四、rewrite标记 flag

flag 作用
last 本条规则匹配完成后,停止匹配,不再匹配后面的规则
break 本条规则匹配完成后,停止匹配,不再匹配后面的规则
redirect 返回302临时重定向,地址栏会显示跳转后的地址
permanent 返回301永久重定向,地址栏会显示跳转后的地址

五、last和break的区别

break 只要匹配到规则,就回去本地路径目录中寻找请求的文件;
last 匹配到规则,跳转后没有内容,则带着跳转后的请求,重新的向server发起一次请求

break请求:

1.请求rw.linux.com/break;
2.首先,会去查找本地的/code/rewrite/test/index.html;
3.如果找到了,则返回/code/rewrite/test/index.html内容;
4.如果没有找到则返回404,找到目录却没有主页,则返回403;

last请求:

1.请求rw.linux.com/last;
2.首先,会去查找本地的/code/rewrite/test/index.html;
3.如果找到了,则返回/code/rewrite/test/index.html内容;
4.如果没找到,会带着新跳转的URI再向server发起一次请求,请求rw.linux.com/test;
5.如果匹配到新的location,则返回该location匹配的内容;
6.如果没有匹配到新的,则再返回404或403;

六、redirect和permanent的区别

redirect:
每次请求都会询问服务器,是否跳转,如果服务器不可用,则跳转失败
permanent:
请求一次后,会记录跳转的地址,以后不再询问,直接跳转,通过浏览器缓存记录

七、rewriter规则实践

【Linux运维架构】Nginx企业实战之rewrite重写规则
在写rewrite规则之前,我们需要开启rewrite日志对规则的匹配进行调式。

[root@web01 code]# vim /etc/nginx/nginx.conf
/var/log/nginx/error.log notice;
http{
    rewrite_log on;
}

1.rewrite的匹配规则

a.先执行server块的rewrite指令
b.其次执行location匹配规则
c.最后执行location中的rewrite

2.大多数用于http协议转https协议

server {
        listen 80;
        server_name www.lixian.fun;
        return 302 https://$server_name$request_uri;
}

$request_filename 请求的文件路径名(带网站的主目录/code/images/test.jpg)
$request_uri 当前请求的文件路径(不带网站的主目录/images/test.jpg)

3.如何更加规范的书写rewrite规则

server {
        listen 80;
        server_name www.lixian.fun lixian.fun;
        if ($http_host = lixian.fun){
            rewrite (.*) http://www.lixian.fun$1;
        }
}

本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:【Linux运维架构】Nginx企业实战之rewrite重写规则
喜欢 (1)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
  1. Your article helped me a lot, is there any more related content? Thanks!