目录
1、什么是地址重写
获得一个来访的URL请求,然后改写成服务器可以处理的另一个URL;
比如访问www.360buy.com会自动转换成www.jd.com,http://www.baidu.com会自动转换成https://www.baidu.com
语法格式:rewrite regex replacement [flag]
【释】rewrite:改写;regex:旧地址栏,支持正则;replacement:新地址栏;flag:标签,可省
2、地址重写演示1
目标:将 web1.test.cn/a.html 地址重写成 web1.test.cn/b.html
server{
listen 80;
server_name web1.test.cn;
rewrite "/a.html$" /b.html #旧地址是从"/"开始匹配,rewrite支持正则$
... ...
}
vim /usr/local/nginx/conf/nginx.conf
这里因为a.html访问会直接跳转到b.html,所以实际a.html存不存在都没有关系,b.html需要实际存在,可以在/usr/local/nginx/html下手动创建;
/usr/local/nginx/sbin/nginx -s reload #重新加载配置文件
浏览器访问测试(通用如果没有配dns需要手动加hosts域名解析):
如上图可以看到,访问的URL是a.html,但是实际读取的是b.html,但是地址栏还是显示的是a.html,如果想要地址栏也显示跳转到b.html,可以在rewrite后面加一个redirect参数,如下:
server{
listen 80;
server_name web1.test.cn;
rewrite "/a.html$" /b.html redirect #将访问页面和地址栏都重写至b.html
... ...
}
/usr/local/nginx/sbin/nginx -s reload #重新加载配置文件
浏览器访问测试:
可以看到访问页面和地址栏都重写至b.html。
3、地址重写演示2
目标:将web1.test.cn/xx 地址重写成 www.baidu.com ,将整个域名改写
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name web1.test.cn;
rewrite ^/ http://www.baidu.com;
# ^/ 是正则,表示匹配任何根开始的地址,即匹配web1.test.cn域名的"/"根后面不管跟的什么内容,都跳转到百度
... ...
}
/usr/local/nginx/sbin/nginx -s reload #重新加载配置文件
浏览器测试,访问web1.test.cn/a.html或者web2.test.cn/a.html
4、地址重写演示3
目标:将web1.test.cn/任意地址 重写成 www.baidu.cm/前面相同任意地址
如:web1.test.cn/xinwen ---> www.gov.cn/xinwen
server {
listen 80;
server_name web1.test.cn;
#rewrite的正则和shell正则略微不一样,()表示复制,可以多个圆括号,$1表示调用粘贴前面第一个()的复制内容,.*是匹配所有,前面的$是结尾符;
rewrite ^/(.*)$ http://www.gov.cn/$1;
... ...
}
/usr/local/nginx/sbin/nginx -s reload #重新加载配置文件
客户端浏览器访问测试,访问web1.test.cn/xinwen ---> http://www.gov.cn/xinwen