nginx 中配置Rewrite跳转
一、Rewrite用法介绍
1. Rewrite跳转场景
1、可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求,
2、为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
3、网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com.
4、根据特殊变量、目录、客户端的信息进行URL调整等。
2.Rewrite跳转实现
Nginx是通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。另外该模块需要PCRE支持,应在编译Nginx时指定 PCRE支持,默认已经安装。根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后Nginx将返回500错误。同时,重写模块包含set指令,来创建新的变量并设l其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。rewrite功能就是,使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url的重写以及重定向。
3.Rewrite实际场景
在实际工作场景,Nginx跳转需求有三种方式可实现。
- 可以直接用rewrite进行匹配跳转
- 也可以使用if匹配全局变量后跳转
- 另外还可以使用location匹配再跳转
所以rewrite只能放在server{},if{},location{}段中
location只能对域名后边的除去传递的参数外的字符串起作用
二、Rewrite语法格式
1、Rewrite命令格式
2、支持的常用正则表达式元字符
3、跳转后的内容
通常为跳转到的网页或网站的url域名地址路径信息。
4、flag标记
4.1、flag标记说明
4.2、last标记和break标记的的比较
三、location匹配规则
1、location的使用分类
2、location的正则匹配的常用表达式
3、location匹配的优先级
4、location优先级的示例
5、rewrite和location的比较
四、基于域名IP等方式跳转的配置
服务器端已经部署好nginx服务。客户端已经做好域名解析服务。
域名解析的配置文件位置:
Linux的hosts文件路径为:/etc/hosts
window的hosts文件路径为:C:\Windows\System32\drivers\etc\hosts
1、基于域名的跳转
现在公司旧域名www.wlm.com有业务需求有变更,需要使用新域名www.wat.com代替。但是旧域名不能废除,需要跳转到新域名上。具体的配置情况如下。
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.wlm.com;
charset utf-8;
access_log /var/log/nginx/wlm.access.log;
location / {
root html;
index index.html index.htm;
if ($host = 'www.wlm.com'){ //如果你输入这个网站
rewrite ^/(.*)$ http://www.wat.com/$1 permanent;
//跳转到另一个网站的任何位置
}
}
基于域名的跳转测试
实现了跳转
2、基于客户端IP访问跳转
例如今天公司业务版本上线,所有IP访问任何内容都显示一个固定维护页面,只有公司IP访问正常。
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.wlm.com;
charset utf-8;
access_log /var/log/nginx/wlm.access.log;
set $rewrite true;
if ($remote_addr = '20.0.0.1'){
set $rewrite false;
}
if ($rewrite = true){
rewrite (.+) /wh.html;
}
location = /wh.html {
root /usr/local/nginx/html/;
}
[root@Nginx ~]# cd /usr/local/nginx/html/
[root@Nginx html]# vim wh.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body>
<h1>维护 中</h1>
</body>
</html>
测试结果