1. 介绍
和Apache等web服务软件一样,Nginx Rewrite的主要功能也是实现URL地址重写,Nginx的 Rewrite规则需要PCRE软件的支持,即通过Perl兼容正则表达式语法进行规则匹配的,前文在安装Nginx软件时就已经安装了这个PCRE软件,以及让Nginx支持Rewrite的功能,默认参数编译 Nginx就会安装支持Rewrite的模块,但是,也必须要PCRE软件的支持。
2. 语法
指令语法:rewrite regex replacement [flag];
默认值:none
应用位置:server、location、if
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement部分内容,结尾是flag标记。下面是一个简单的URL Rewrite跳转的例子:
rewrite ^/(.*) http://www.sancheng.org/$1 permanent;
解释
在上述指令中,rewrite为固定关键字,表示开启一条rewrite匹配规则,regex部分是^/(.*),这是一个正则表达式,匹配所有,匹配成功后跳转到http://www.sancheng.org/$1,这里
的$1是取前面regex部分()里的内容,结尾permanent;表示永久301重定向标记,即跳转到后面的
http://www.sancheng.org/$1地址上。
2.1 例子1
server {
listen 80;
server_name www.abc.org;
location / {
rewrite ^/(.*) https://www.sancheng.cn/$1 permanent;
}
access_log logs/www_access.log main;
}
解释
当用户访问 www.abc.org的就自动跳转到了https://www.caimengzhi.cn 去了。
如果这样访问www.abc.org/test.html 就跳转成https://www.sancheng.cn/test.html。
$1取的是括号(.*)里面的内容,也就是test.html。
2.2 例子2
server {
listen 80;
server_name www.abc.org;
location / {
root html/www;
index index.html;
}
location ^~ /images/ {
rewrite ^/(.*) https://www.sancheng.cn/$1 permanent;
}
access_log logs/www_access.log main;
}
解释
用户访问www.abc.org访问网站正常显示,访问www.abc.org/test.html的时候也正常显示。
只有当用户访问www.abc.org/images/test.jpg 的时候,只要带有images这个路径就跳转,这里跳转到https://www.sancheng.cn/images/test.jpg 。
3. Rewrite regex常用正则表达式字符
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4eb0cafd9cf16b274a2016eb7529958d.png)
4. rewrite指令结尾flag标记说明
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/12aac008844f62f9b0abcb05b81158d3.png)
5. Nginx Rewrite的企业应用场景
Nginx的Rewrite功能在企业里应用非常广泛:
可以调整用户浏览的URL,看起来更规范,合乎开房及产品人员的需求。
为了让搜索引擎收录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务
网站换新域名后,让旧的域名的访问跳转到新的域名上,例如:京东的360buy.com换成jd.com
根据特殊变量、目录、客户端的信息进行URL跳转等。
6. 企业实战301
公司换新域名,需要做301永久重定向,老域名为: www.360buy.com 新域名为:www.jd.com 配置信息如下:
server {
listen 80;
server_name www.360buy.com;
rewrite ^/(.*) http://www.jd.com/$1 permanent;
}
server {
listen 80;
server_name www.jd.com jd.com;
location / {
root html/www;
index index.php index.html;
}
}
当用户访问 www.360buy.com的时候,就自动跳转到了https://www.jd.com上,实现了301永久重定向。