ngx_http_rewrite_module
模块功能
The
ngx_http_rewrite_module
module is used to change request URI using PCRE regular expressions, return redirects, and conditionally select configurations. 将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换
目标实现:
代码语言:javascript复制 http://www.a.com/hn
--> http://www.a.com/henan
http://www.a.com
-->https://www.a.com/
代码语言:javascript复制1、rewrite regex replacement [flag]
将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI
可用位置:server, location, if
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查
隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制
如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端
301:永久重定向
[flag]:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环,不建议在lation中使用
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用
redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头,使用相对路径,状态码:302
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301
2、return
return code [text];
return code URL;
return URL;
停止处理,并返回给客户端指定的响应码
可用位置:server, location, if
3、rewrite_log on | off;
是否开启重写日志, 发送至error_log(notice level)
可用位置:http, server, location, if
4、set $variable value;
用户自定义变量
注意:变量定义和调用都要以$开头
可用位置:server, location, if
5、if (condition) { ... }
引入新的上下文,条件满足时,执行配置块中的配置指令;
可用位置:server, location
condition:比较操作符:
== #相同
!= #不同
~ #模式匹配,区分字符大小写
~* #模式匹配,不区分字符大小写
!~ #模式不匹配,区分字符大小写
!~* #模式不匹配,不区分字符大小写
文件及目录存在性判断:
-e, !-e #存在(包括文件,目录,软链接)
-f, !-f #文件
-d, !-d #目录
-x, !-x #执行
示例模板1:
代码语言:javascript复制[root@centos7 conf.d]#vim vhosts.conf
server {
server_name www.a.com;
root /data/web3/;
location /bbs {
rewrite ^/bbs(.*)$ /forum$1 last; #正则表达式后向引用
}
}
效果:
http://www.a.com/bbs
--> http://www.a.com/forum/
示例模板2:永久重定向:http跳转到https
代码语言:javascript复制[root@centos7 conf.d]#vim vhosts.conf
server{
listen 80;
listen 443 ssl;
server_name www.c.com;
root /data/web3/;
ssl on;
ssl_certificate /etc/nginx/conf.d/b.crt;
ssl_certificate_key /etc/nginx/conf.d/bb.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
location / {
if ($scheme = http ){
rewrite / https://www.c.com/ permanent;
}
}
}
示例模板3:访问url包含admin时禁止访问
代码语言:javascript复制server{
listen 80;
listen 443 ssl;
server_name www.c.com;
root /data/web3/;
ssl on;
ssl_certificate /etc/nginx/conf.d/b.crt;
ssl_certificate_key /etc/nginx/conf.d/bb.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
location / {
if ($uri ~* .*admin.* ){
return 403 "nonnonononono";
}
}
}
ngx_http_rewrite_module
模块 详细说明请参考官网 地址链接