版权声明: 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;
}
}
访问的原始地址
跳转的地址