Nginx URL重写rewrite机制原理及使用实例


Posted in Servers onApril 01, 2021

URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中

Nginx URL重写(rewrite)介绍

和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持

rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

rewrite语法格式及参数语法说明如下:

rewrite <regex> <replacement> [flag];

关键字 正则 替代内容 flag标记

关键字:其中关键字error_log不能改变

正则:perl兼容正则表达式语句进行规则匹配

替代内容:将正则匹配的内容替换成replacement

flag标记:rewrite支持的flag标记

flag标记说明:

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

rewrite参数的标签段位置:

server,location,if

例子:

rewrite ^/(.*) http://www.czlun.com/$1 permanent;

说明:

  • rewrite为固定关键字,表示开始进行rewrite匹配规则
  • regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
  • replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
  • flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上

regex 常用正则表达式说明

 

字符 描述
\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”
? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"
. 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。
(pattern) 匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要\(Content\)

rewrite 企业应用场景

Nginx的rewrite功能在企业里应用非常广泛:

  • u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
  • u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
  • u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com
  • u 根据特殊变量、目录、客户端的信息进行URL调整等

Nginx配置rewrite过程介绍

(1)创建rewrite语句

vi conf/vhost/www.abc.com.conf

#vi编辑虚拟主机配置文件

文件内容

server {
    listen 80;
    server_name abc.com;
    rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
server {
    listen 80;
    server_name www.abc.com;
    location / {
        root /data/www/www;
        index index.html index.htm;
    }
    error_log  logs/error_www.abc.com.log error;
    access_log  logs/access_www.abc.com.log  main;
}

或者

server {
    listen 80;
    server_name abc.com www.abc.com;
    if ( $host != 'www.abc.com' ) {
        rewrite ^/(.*) http://www.abc.com/$1 permanent;
    }
    location / {
        root /data/www/www;
        index index.html index.htm;
    }
    error_log  logs/error_www.abc.com.log error;
    access_log  logs/access_www.abc.com.log  main;
}

(2)重启服务

确认无误便可重启,操作如下:

nginx -t

#结果显示ok和success没问题便可重启

nginx -s reload

(3)查看跳转效果

打开浏览器访问abc.com

页面打开后,URL地址栏的abc.com变成了www.abc.com说明URL重写成功。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
Nginx Rewrite使用场景及配置方法解析
Apr 01 Servers
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
Nov 17 Servers
使用Docker容器部署rocketmq单机的全过程
Apr 03 Servers
Docker官方工具docker-registry案例演示
Apr 13 Servers
Win Server2016远程桌面如何允许多用户同时登录
Jun 10 Servers
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
Jun 25 Servers
GPU服务器的多用户配置方法
Jul 07 Servers
nginx访问报403错误的几种情况详解
Jul 23 Servers
Win10系统搭建ftp文件服务器详细教程
Aug 05 Servers
windows系统搭建WEB服务器详细教程
Aug 05 Servers
修改Nginx配置返回指定content-type的方法
Sep 23 Servers
Elasticsearch6.2服务器升配后的bug(避坑指南)
Sep 23 Servers
nginx限制并发连接请求数的方法
Apr 01 #Servers
Nginx已编译的nginx-添加新模块
Nginx下配置Https证书详细过程
详解Nginx启动失败的几种错误处理
Apr 01 #Servers
Nginx 根据URL带的参数转发的实现
Apr 01 #Servers
Nginx Rewrite使用场景及配置方法解析
Nginx解决403 forbidden的完整步骤
Apr 01 #Servers
You might like
php 引用(&amp;)详解
2009/11/20 PHP
解析php类的注册与自动加载
2013/07/05 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
PHP重载基础知识回顾
2020/09/10 PHP
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python 文件重命名工具代码
2009/07/26 Python
从零学Python之引用和类属性的初步理解
2014/05/15 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
自学python的建议和周期预算
2019/01/30 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
股东协议书范本
2014/04/14 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
2015年副班长工作总结
2015/05/15 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
MySQL创建管理KEY分区
2022/04/13 MySQL