一、rewrite基础
-
地址跳转
地址重写 www.360buy.com——>jd.com
-
rewrite使用场景、实现原理
- 地址跳转:www.xuliangwei.com/class --> class.xuliangwei.com
- 协议跳转: http升级至https。 ( Rewrite方式来实现。 )
- URL静态化,将动态URL地址显示为静态URL地址的一种技术。
-
Rewrite URI重写配置语法
set 设定变量 if 条件判断 return 返回数据 rewrite
二、rewrite用例
需求1: 将用户请求url.oldxu.com.zh跳转至url.oldxu.com/zh
需求2: 将用户请求url.oldxu.com.jp跳转至url.oldxu.com/jp
[root@web01 ~]# cat /etc/nginx/conf.d/url.oldxu.com.conf
server {
listen 80;
server_name url.oldxu.com.zh url.oldxu.com.jp;
location / {
#判断用户请求的域名是zh还是jp
if ( $http_host ~* "zh" ) {
set $language zh;
}
if ( $http_host ~* "jp" ) {
set $language jp;
}
#配置rewrite跳转规则
rewrite ^/$ http://url.oldxu.com/$language/ permanent;
}
}
server {
listen 80;
server_name url.oldxu.com;
root /opt;
location / {
index index.html;
}
}
[root@web01 ~]# mkdir /opt/zh -p
[root@web01 ~]# mkdir /opt/jp -p
[root@web01 ~]# echo "zh.." > /opt/zh/index.html
[root@web01 ~]# echo "jp.." > /opt/jp/index.html
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl reload nginx
需求3: 过滤 Nginx 请求中包含 a1=3526 的http请求到 10.16.3.5 的 8080 端口处理。
server {
listen 80;
server_name url.oldxu.com;
root /opt;
location / {
index index.html;
#如果用户请求的uri中a1=3256,我们通过反向代理代理到10.16.3.5:8080端口
if ( $request_uri ~* 'a1=3256' ) {
#proxy_pass http://10.16.3.5:8080; #这个地址是不存在的
return 200 'ok....!'; #所以使用return来替代模拟
}
}
}
测试的curl命令: curl -L -HHost:url.oldxu.com http://10.0.0.7?a1=3256
-L 跟随跳转
-H 指定Host头,具体要请求的域名是
三、return:主要用来返回数据|返回字符串|返回url地址。
- 如果用户使用 IE 访问 url.oldxu.com 则返回字符串 ( 请更换您的浏览器。 ) chrome
server {
listen 80;
server_name url.oldxu.com;
root /opt;
charset gbk,utf-8;
location /