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 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
Nginx+Tomcat实现负载均衡、动静分离的原理解析
Mar 31 Servers
Nginx 负载均衡是什么以及该如何配置
Mar 31 Servers
Nginx配置80端口访问8080及项目名地址方法解析
Mar 31 Servers
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
Feb 12 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
Tomcat执行startup.bat出现闪退的原因及解决办法
Apr 20 Servers
Tomcat项目启动失败的原因和解决办法
Apr 20 Servers
讨论nginx location 顺序问题
May 30 Servers
Win Server2016远程桌面如何允许多用户同时登录
Jun 10 Servers
Windows10安装Apache2.4的方法步骤
Jun 25 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
php jsonp单引号转义
2014/11/23 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
Python基于locals返回作用域字典
2020/10/17 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
internal修饰符起什么作用
2013/12/16 面试题
八年级物理教学反思
2014/01/19 职场文书
教师求职信范文
2014/05/24 职场文书
2014年文秘工作总结
2014/11/25 职场文书
幼儿园感谢信
2015/01/21 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
python 学习GCN图卷积神经网络
2022/05/11 Python