在写rewrite规则之前,我们需要开启rewrite日志对规则的匹配进行调试。
[root@web01 code]# vim /etc/nginx/nginx.conf
http{
rewrite_log on;
}
案例一 |
用户访问/abc/1.html
实际上真实访问的是/ccc/bbb/2.html
#http://www.baimei.com/abc/1.html ==> http://www.baimei.com/ccc/bbb/2.html
#1.准备真实访问路径
[root@web03 ~]# mkdir /code/ccc/bbb -p
[root@web03 ~]# echo "ccc_bbb_2" > /code/ccc/bbb/2.html
#2.Nginx跳转配置
[root@web03 ~]# cd /etc/nginx/conf.d/
[root@web03 conf.d]# cat ccbb.conf
server {
listen 80;
location / {
root /code;
index index.html;
}
location /abc {
rewrite (.*) /ccc/bbb/2.html redirect;
#return 302 /ccc/bbb/2.html;
}
}
#3.重启Nginx服务
[root@web03 conf.d]# nginx -t
[root@web03 conf.d]# nginx -s reload
案例二 |
用户访问/2018/ccc/2.html
实际上真实访问的是/2014/ccc/bbb/2.html
##http://www.baimei.com/2018/ccc/2.html ==> http://www.baimei.com/2014/ccc/bbb/2.html
#1.准备真是的访问路径
[root@web03 conf.c]# mkdir /code/2014/ccc/bbb -p
[root@web03 conf.c]# echo "2014_ccc_bbb_2" > /code/2014/ccc/bbb/2.html
#2.Nginx跳转配置
[root@web03 conf.d]# cat ccbb.conf
server {
listen 80;
location / {
root /code;
index index.html;
}
location /2018 {
rewrite ^/2018/(.*)$ /2014/$1 redirect;
}
}
#3.重启nginx服务
[root@web03 conf.d]# nginx -t
[root@web03 conf.d]# nginx -s reload
案例三 |
用户访问/test实际上真实访问的是www.baimeidashu.com
#1.Nginx跳转配置
[root@web03 conf.d]# cat test.conf
server {
listen 80;
location /test {
rewrite (.*) https://www.baimeidashu.com redirect;
}
}
#2.重启nginx服务
[root@web03 conf.d]# nginx -s reload
案例四 wordpress地址改写 案例 |
用户访问couese-11-22-33.html
实际上真实访问的是/course/11/22/33/course_33.html
#http://www.lzy.com/couese-11-22-33.html ==> http://www.lzy.com/course/11/22/33/course_33.html
#1.准备真实的访问路径
[root@web03 ~]# mkdir /code/course/11/22/33 -p
[root@web03 ~]# echo "curl docs.etiantian.org" > /code/course/11/22/33/course_33.html
#2.Nginx跳转配置
[root@web03 conf.d]# cat test.conf
server {
listen 80;
root /code;
index index.html;
location / {
#灵活配法
rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html redirect;
#固定配法
#rewrite ^/course-(.*) /course/11/22/33/course_33.html redirect;
}
}
#3.重启nginx服务
[root@web03 conf.d]# nginx -s reload
案例五 |
将http
请求跳转到https
#Nginx跳转配置
server {
listen 80;
server_name www.baimei.com;
rewrite ^(.*) https://$server_name$1 redirect;
#return 302 https://$server_name$request_uri;
}
server {
listen 443;
server_name www.baimei.com;
ssl on;
}
错误页跳转
server {
listen 80;
root /code;
location /test {
rewrite (.*) https://www.baimeidashu.com redirect;
}
error_page 403 404 500 501 502 @error_test;
location @error_test {
rewrite ^(.*)$ /404.html break;
}
}
变量使用
案例1:需要在跳转后的请求行加上想要的参数&showoffline=1
server {
listen 80;
server_name test.baimei.com;
# $args为Nginx内置变量请求行的参数
set $args "&showoffline=1";
location / {
root /code;
index index.html;
}
if ($remote_addr = 10.0.0.1 ){
rewrite (.*) http://test.baimei.com$1;
}
}
案例2:网站维护,指定IP正常访问,其他IP跳转维护页面
server {
listen 80;
server_name test.baimei.com;
root /code;
charset utf-8,gbk;
location / {
index index.html;
set $ip 0; # 设置变量为0
if ($remote_addr = "10.0.0.1"){
set $ip 1; # 如果来源IP为0.1则设置为1
}
if ($ip = 0){ # 判断如果变量为0 则跳转维护页面
rewirte ^(.*)$ /wh.html break;
}
}
}
欢迎来撩 : 汇总all