【Web 集群实战】10_Nginx rewrite

版权声明: https://blog.csdn.net/weixin_42061048/article/details/82784745

【Web 集群实战】10_Nginx rewrite

标签(空格分隔): Web集群实战


1. Nginx rewrite 语法

rewrite 指令语法

  • 指令语法:rewrite regex replacement [flag];
  • 默认值:none;
  • 应用位置:server、location、if
  • rewrite 是实现 URL 重写的关键指令,根据 regex (正则表达式)部分的内容,重定向到 replacement 部分,结尾是 flag 标记。

regex 常用正则表达式字符

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n” 匹配字符 “n”。“\n” 匹配一个换行符。序列 “\\” 匹配 “\” 而 “\(” 则匹配 “(”
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配“\n”或“\r”之后的位置。
$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的 Multiline 属性,$ 也匹配 “\n” 或 “\r” 之前的位置
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”, * 等价于{0,}
+ 匹配前面的子表达式一次或多次。例如,“zo+” 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于{1,}
? 匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 中的 “do”。? 等价于{0,1}
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 “\n” 在内的任何字符,请使用像 “[.\n]” 的模式
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在 VBScript 中使用 SubMatches 集合,在 JS 中则使用 $0…$9 属性

flag 标记的说明

flag 标记符号 说明
last 本条规则匹配完成后,继续向下匹配新的 location URI 规则
break 本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent 返回301永久重定向,浏览器地址会显示跳转后的URL地址

2. Nginx rewrite 301 跳转

  • 修改 www.conf 配置
server {
	listen       80;
	server_name  yangyangyang.org;
	rewrite ^/(.*) http://www.yangyangyang.org/$1 permanent;
}
server {
	listen       80;
	server_name  www.yangyangyang.org;
    location / {
        root   html/www;
        index  index.html index.htm;            
    }
	access_log logs/access_www.log main gzip buffer=32k flush=5s;
}

访问的原始地址
访问的原始地址

跳转的地址
跳转的地址

3. Nginx rewrite 不同域名的 URL 跳转

例 1 实现访问 http://blog.yangyangyang.org 时跳转到 http://www.yangyangyang.org/blog/ylt.html。

  • 设置输出结果
[root@ylt001 conf]# cd ../html/www
[root@ylt001 conf]# mkdir -p blog
[root@ylt001 conf]# vi ../html/www/blog/ylt.html
[root@ylt001 conf]# cat ../html/www/blog/ylt.html
hello!
  • 修改 blog.conf 配置文件
#www virtualhost by ylt
server {
	listen       80;
	server_name  blog.yangyangyang.org;
    location / {
        root   html/blog;
        index  index.html index.htm;            
    }
    if ( $http_host ~* "^(.*)\.yangyangyang\.org$") {
    	set $domain $1;
    	rewrite ^/(.*) http://www.yangyangyang.org/$domain/ylt.html break;
    }
}

访问的原始地址
访问的原始地址

跳转的地址
跳转的地址

例 2 实现访问 http://yangyangyang.org/bbs 时跳转到 http://bbs.yangyangyang.org

  • 修改 www.conf 配置文件
#www virtualhost by ylt
server {
	listen       80;
	server_name  www.yangyangyang.org yangyangyang.org;
    location / {
        root   html/www;
        index  index.html index.htm;            
    }
    rewrite ^/(.*)/bbs http://bbs.yangyangyang.org break;
	access_log logs/access_www.log main gzip buffer=32k flush=5s;
}
  • 修改 bbs.conf 配置文件
#bbs virtualhost by ylt
server {
	listen       80;
	server_name  bbs.yangyangyang.org;
    location / {
        root   html/bbs;
        index  index.html index.htm;            
    }
}

访问的原始地址
访问的原始地址

跳转的地址
跳转的地址

猜你喜欢

转载自blog.csdn.net/weixin_42061048/article/details/82784745