1. 什么是Nginx Rewrite

和Apache等web服务软件一样,Nginx Rewrite的主要功能也是实现URL地址重写,Nginx的
Rewrite规则需要PCRE软件的支持,即通过Perl兼容正则表达式语法进行规则匹配的,前文在安装Nginx软件时就已经安装了这个PCRE软件,以及让Nginx支持Rewrite的功能,默认参数编译
Nginx就会安装支持Rewrite的模块,但是,也必须要PCRE软件的支持。

2. Nginx Rewrite语法

指令语法:rewrite regex replacement [flag];
默认值:none
应用位置:server、location、if
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement部分内容,结尾是flag标记。下面是一个简单的URL Rewrite跳转的例子:
rewrite ^/(.) http://www.etiantian.org/$1 permanent;
在上述指令中,rewrite为固定关键字,表示开启一条rewrite匹配规则,regex部分是^/(.
),这是一个正则表达式,匹配所有,匹配成功后跳转到http://www.etiantian.org/$1,这里
的$1是取前面regex部分()里的内容,结尾permanent;表示永久301重定向标记,即跳转到后面的
http://www.etiantian.org/$1地址上。
小案例1:
server {
listen 80;
server_name www.etiantian.org;
location / {
rewrite ^/(.*) https://www.linux.ac.cn/$1 permanent;
}
access_log logs/www_access.log main;
}
当用户访问 www.etiantian.org的就自动跳转到了https://www.linux.ac.cn 去了。
如果这样访问www.etiantian.org/bing.html 就跳转成https://www.linux.ac.cn/bing.html

$1取的是括号(.*)里面的内容,也就是bing.html。

小案例2:
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html;
}
location ^~ /images/ {
rewrite ^/(.*) https://www.linux.ac.cn/$1 permanent;
}
access_log logs/www_access.log main;
}
用户访问www.etiantian.org访问网站正常显示,访问www.etiantian.org/bing.html的时候也正常显示。
只有当用户访问www.etiantian.org/images/1.jpg 的时候,只要带有images这个路径就跳转,这里跳转到https://www.linux.ac.cn/images/1.jpg
Nginx Rewrite - 图1
Nginx Rewrite - 图2

3. Rewrite regex常用正则表达式字符

Nginx Rewrite - 图3
Nginx Rewrite - 图4

4. rewrite指令结尾flag标记说明

rewrite指令最后一项参数为flag标记,该标记说明见下表。

flag标记符号 说明
last 本条规则匹配完成后,继续向下匹配新的location URI规则。
break 本条规则匹配完成后即终止,不再匹配后面的任何规则。
redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址。
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
  1. 在以上的flag标记中,lastbreak用来实现URL重写,浏览器地址栏URL地址不变。<br />但在服务器端访问的程序及路径发生了变化。redirectpermanent用来实现URL跳转,<br />浏览器地址栏会显示跳转后的URL地址。<br /> lastbreak标记的实现功能类似,但二者之间有细微的差别,使用alias指令时必须<br />用last标记,使用proxy_pass指令时要使用break标记。last标记在本条rewrite规则<br />执行完毕后,会对其所在的server{……}标签重新发起请求,而break标记则在本条规则匹配<br />完成后,终止匹配,不在匹配后面的规则。

5. Nginx Rewrite的企业应用场景

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

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

6. 企业实战301重定向

公司换新域名,需要做301永久重定向,老域名为: www.etiantian.org 新域名为:www.linux.ac.cn。配置信息如下:
server {
listen 80;
server_name www.etiantian.org;
rewrite ^/(.*) http://www.linux.ac.cn/$1 permanent;
}
server {
listen 80;
server_name www.linux.ac.cn linux.ac.cn;
location / {
root html/www;
index index.php index.html;
}
}
当用户访问 www.etiantian.org的时候,就自动跳转到了https://www.linux.ac.cn 上,实现了
301永久重定向。