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 相关文章推荐
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
Mar 09 Servers
Nginx反向代理配置的全过程记录
Jun 22 Servers
openstack云计算keystone组件工作介绍
Apr 20 Servers
Windows Server 2008 修改远程登录端口以及配置防火墙
Apr 28 Servers
讨论nginx location 顺序问题
May 30 Servers
CentOS7安装MySQL8的超级详细教程(无坑!)
Jun 10 Servers
Tomcat 与 maven 的安装与使用教程
Jun 16 Servers
shell进度条追踪指令执行时间的场景分析
Jun 16 Servers
腾讯云服务器部署前后分离项目之前端部署
Jun 28 Servers
Windows Server 2008配置防火墙策略详解
Jun 28 Servers
Nginx报404错误的详细解决方法
Jul 23 Servers
windows系统搭建WEB服务器详细教程
Aug 05 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
flash用php连接数据库的代码
2011/04/21 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python编码爬坑指南(必看)
2016/06/10 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
Python3爬楼梯算法示例
2019/03/04 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
业务部门经理岗位职责
2014/02/23 职场文书
工作说明书范文
2014/05/07 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
中学语文教学反思
2016/02/16 职场文书