我是靠谱客的博主 受伤饼干,最近开发中收集的这篇文章主要介绍Nginx Rewrite的六大跳转场景说明一、网址更换新域名后,旧的访问跳转到新的域名上。二·、基于客户端IP访问跳转三、新域名跳转添加目录四、基于参数匹配的跳转五、基于目录下所有php文件进行跳转六、基于一个具体的url页面进行跳转,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 说明
- 一、网址更换新域名后,旧的访问跳转到新的域名上。
- 二·、基于客户端IP访问跳转
- 三、新域名跳转添加目录
- 四、基于参数匹配的跳转
- 五、基于目录下所有php文件进行跳转
- 六、基于一个具体的url页面进行跳转
说明
- rewrite语法格式及参数语法如下:
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
- flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
Rewrite跳转场景:
一、网址更换新域名后,旧的访问跳转到新的域名上。
- 修改默认站点的配置文件。
vim /etc/nginx //已做链接
server {
server_name www.aa.com;
...
添加
if ($host = 'www.bb.com') {
rewrite ^/(.*)$ http://www.aa.com/$1 permanent;
}
- 添加新域名www.bb.com的站点位置,
listen 80;
server_name www.aa.com;
charset utf8;
access_log logs/aa.access.log main;
location / {
root /var/www/html/aa.com;
index index.html index.htm;
}
error_page 500 502 503 504/50x.html;
location = 50x.html{
root html;
}
- 重启nginx
systemctl restart nginx
- 浏览器验证
二·、基于客户端IP访问跳转
- 公司业务版本上线,所有IP访问任何内容都显示一个固定的维护页面,只有公司可以正常访问。
- 修改nginx配置文件
vim /etc/nginx.conf
set $rewrite true;
if ($remote_addr = "20.0.0.13") {
set $rewrite false;
}
if ($rewrite = true) {
rewrite (.+) /maintenance.html;
}
location = /maintenance.html {
root /usr/local/nginx/html;
}
- 编辑重定向网页
vim /usr/local/nginx/html/maintenance.html
Website is Maintaining,Please visit later.
- 重启nginx
systemctl restart nginx
4.验证
- 20.0.0.13主机验证
- 20.0.0.10 主机验证
三、新域名跳转添加目录
- 与场景一类似
实现浏览器访问 bbs.bb.com/post/index.html 跳转到 www.aa.com/bbs/post/index.html
server {
listen 80;
server_name bbs.bb.com;
charset utf8;
access_log logs/bb.com.access.log main;
location /post {
rewrite (.+) http://www.aa.com/bbs$1 permanent;
}
}
server {
listen 80;
server_name www.aa.com;
charset utf8;
access_log logs/aa.access.log main;
location / {
root /var/www/html/aa.com;
index index.html index.htm;
}
error_page 500 502 503 504/50x.html;
location = 50x.html{
root html;
}
}
- 使用fiddler4抓包,发现实现了rewrite到www.aa.com/bbs/post/index.html 但我们aa.com下没有这个目录文件,所以出现了404 Not Found。
现在编辑
cd /var/www/html/aa.com
mkdir -p bbs/post/
vim bbs/post/index.html
重新查看
四、基于参数匹配的跳转
在适当的位置添加:
if ($request_uri ~ ^/100-(100|200)-(d+).html$) {
rewrite (.*) http://www.aa.com permanent;
- 当访问www.bb.com/100-200-3.html时,跳转到www.aa.com,如下图所示
- 当访问www.bb.com/100-150-5时,不符合rewrite条件,不能跳转到www.aa.com
五、基于目录下所有php文件进行跳转
- 访问www.bb.com/upload/gg.php 跳转到 www.aa.com首页
适当位置添加:
location ~* /upload/.*.php$ {
rewrite (.+) http://www.aa.com permanent;
}
如图所示:
六、基于一个具体的url页面进行跳转
- 如访问http://www.bb.com/test/bb.html 跳转到www.aa.com
可在合适位置添加:
location ~* ^/test/bb.html {
rewrite (.+) http://www.aa.com permanent;
}
效果验证:
Reference:location和rewrite的配合使用例子
最后
以上就是受伤饼干为你收集整理的Nginx Rewrite的六大跳转场景说明一、网址更换新域名后,旧的访问跳转到新的域名上。二·、基于客户端IP访问跳转三、新域名跳转添加目录四、基于参数匹配的跳转五、基于目录下所有php文件进行跳转六、基于一个具体的url页面进行跳转的全部内容,希望文章能够帮你解决Nginx Rewrite的六大跳转场景说明一、网址更换新域名后,旧的访问跳转到新的域名上。二·、基于客户端IP访问跳转三、新域名跳转添加目录四、基于参数匹配的跳转五、基于目录下所有php文件进行跳转六、基于一个具体的url页面进行跳转所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复