一、基于域名的跳转
公司旧域名www.old.com有业务需求有变更,需要使用新域名www.new.com代替。
- 要求:
旧域名不能废除
从旧域名跳转到新域名上,且保持其参数不变 - 实验过程:
1.配置新旧域名的DNS
www.old.com 192.168.10.30
www.new.com 192.168.10.30
2.更改配置文件内容,添加域名跳转,如果访问www.old.com,则跳转到www.new.com
新域名 - 实操:
1.修改配置文件
添加重定向
[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.old.com;
if ($host = 'www.old.com'){
##添加重写
rewrite ^/(.*)$ http://www.new.com/$1 permanent;
}
charset utf-8;
access_log logs/old.com.access.log main;
location / {
root html;
index index.html index.htm;
}
}
添加的新域名
server {
listen 80;
server_name www.new.com;
charset utf-8;
access_log /var/log/nginx/www.new.com-access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
2.绑定域名检查语法并重启服务
[root@server ~]# vi /etc/hosts
192.168.10.30 www.old.com www.new.com ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx
3.访问www.old.com,会自动跳转www.new.com,并且返回码为301重定向
二、基于客户端IP地址
因公司业务测试,所有其他IP访问公司网站都显示维护页面,只有公司IP访问正常
假设服务器IP为192.168.10.30,公司IP为192.168.10.50
1.修改配置文件,添加重定向
[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.old.com;
set $rewrite true; ###判断标志$rewrite
if ($remote_addr = "192.168.10.50") {
#允许公司内部访问,更改标志位false(这样不会执行下面if判断的rewrite了)
set $rewrite false;
}
if ($rewrite = true) {
rewrite (.+) /new.html; ##如果不是公司IP,则重定向到维护页面
}
charset utf-8;
access_log logs/old.com.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2.检查语法并重启服务
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx
4.添加一个维护网页
[root@server ~]# vi /usr/local/nginx/html/new.html
Website is Maintaining,Please visit later!!!
3.测试验证
使用192.168.10.50主机访问www.old.com,可以访问原网页,(要在/etc/hosts里添加域名绑定192.168.10.30 www.old.com)
使用其他主机访问www.old.com,不可以访问原网页,会重定向到维护页面
三、基于旧、新域名跳转并加目录
将域名www.old.com下的所有发帖都跳转到www.new.com/old,且域名跳转后保持参数不变
添加重定向
1.修改配置文件
[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.old.com;
location /first {
rewrite (.+) http://www.new.com/old$1 permanent;
}
charset utf-8;
access_log logs/old.com.access.log main;
location / {
root html;
index index.html index.htm;
}
}
添加新域名
server {
listen 80;
server_name www.new.com;
charset utf-8;
access_log /var/log/nginx/new.com.access.log main;
location / {
root /opt/share/nginx/html;
index index.html index.htm;
}
}
2.绑定域名检查语法并重启服务
[root@server ~]# vi /etc/hosts
192.168.10.30 www.old.com www.new.com ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx
3.在/usr/local/nginx/html/下创建一个first目录,并写入一个网页
[root@server ~]# mkdir -p /usr/local/nginx/html/first/
[root@server ~]# vi /usr/local/nginx/html/first/1.html
This is old!!!
4.创建新域名的目录并把原来旧的网页文件1.html复制到/opt/share/nginx/html/old/下
[root@server ~]# mkdir -p /opt/share/nginx/html/old/
[root@server ~]# cp -r /usr/local/nginx/html/first/ /opt/share/nginx/html/old/
[root@server ~]# cat /opt/share/nginx/html/old/first/1.html
This is old!!!
5.访问www.old.com/first/1.html跳转到www.new.com/old/first/1.html,且域名跳转后保持参数不变
四、基于参数匹配的跳转
现在访问http://www.test.com/100-(100|200)-100.html
跳转到http://www.test.com页面。
1.修改配置文件
[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.test.com;
if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
rewrite (.*) http://www.test.com permanent;
}
charset utf-8;
access_log logs/test.com.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2.检查语法并重启服务
[root@server ~]# vi /etc/hosts
192.168.10.30 www.test.com ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx
3.访问www.test.com/100-100-10.html,会跳转www.test.com
访问www.test.com/100-300-10.html,超出匹配范围不会跳转www.test.com
五、基于目录下所有php文件跳转
访问http://www.test.com/upload/1.php跳转到首页
1.修改配置文件
[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.test.com;
location ~* /upload/.*\.php$ {
rewrite (.+) http://www.test.com permanent;
}
charset utf-8;
access_log logs/test.com.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2.检查语法并重启服务
[root@server ~]# vi /etc/hosts
192.168.10.30 www.test.com ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx
3.访问http://www.test.com/upload/1.php,会跳转www.test.com
六、基于最普通url请求的跳转
访问一个具体的页面跳转到首页,如浏览器访问http://www.test.com/1/test.html跳转到首页。
1.修改配置文件
[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.test.com;
location ~* ^/1/test.html {
rewrite (.+) http://www.test.com permanent;
}
charset utf-8;
access_log logs/test.com.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2.检查语法并重启服务
[root@server ~]# vi /etc/hosts
192.168.10.30 www.test.com ##在最后加入,绑定域名
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx
3.访问http://www.test.com/1/test.html,会跳转www.test.com