linux交流群:22346652。欢迎Linux爱好者加入,一起学习,一起进步。
nginx的重写功能
原创
©著作权归作者所有:来自51CTO博客作者yan_ruo_gu的原创作品,请联系作者获取转载授权,否则将追究法律责任
rewrite 主要功能就是实现url的重写,nginx的rewrite规则采用PCRE(Perl Compatible Regular Expressions) Perl兼容正则表达式的语法进行规则匹配,如果需要nginx的rewrite功能,在编译nginx之前,需要编译安装PCRE库
例:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msic/$1 break; #当用户代理为IE浏览器,则跳转至/msic/目录下
}
if (! -f $request_filename) {
rewrite ^/img/(.*)$ /site/$host/p_w_picpaths/$1 last; #当用户请求的/img/下的某文件不存在,则跳转到/site/$host/p_w_picpaths/目录下
}
rewrite语法规则:
变量名可以使用“=”或“!=”运算符
"~"符号表示区分大小写字母的匹配
"~*"表示不区分大小写字母的匹配
"!~"和"!~*"与"~" "~*"相反
"-f"和"!-f"用来判断文件是否存在
"-d"和“!-d”判断目录是否存在
"-e" 和"!-e"判断文件或目录是否存在
"-x" "!-x"判断文件是否可执行
也支持$1~$9位置化参数
return指令:
location ~ .*\.(sh|bash)?$ {
return 403;
}
#如果访问的url以"*.sh" "*.bash"结尾,则返回403
if ($host ~* ^(.*?)\.aaa\.com$) {
set $var_tz '1';
}
if ($host ~* ^192\.168\.1\.(.*?)$) {
set $var_tz '1';
}
if ($host ~* ^localhost) {
set $var_tz '1';
}
if ($var_tz !~ '1') {
rewrite ^/(.*)$ http://www.aaa.com/ redirect;
}
#如果访问的url非*.aaa.com和192.168.0.* 及localhost ,则重定向到http://www.aaa.com
flag标记:
last: 相当 于apache里的[L]标记,表示完成rewrite
break: 本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect: 返回302临时重定向,浏览器地址栏会显示跳转后的url地址
permanent: 返回301永久重定向,浏览器地址栏会显示跳转后的url地址
last和break用来实现uri重写,浏览器地址栏url地址不变
redirect和permanent用来实现url重写,浏览吕地址栏会显示跳转后的url地址
一般在根location中(即location / {...})或直接在server标签中编写rewrite规则,推荐使用last标记,在非根location中(location /cms/ {....}),则使用break标记
e.g.
location /cms/ {
proxy_pass http://test.yourdomain.com;
rewrite "^/cms/(.*)\.html$" /cms/index.html break;
}
实例:
location / {
rewrite ^/data/?$ /bbs/ last; 将/data目录重定向到/bbs/
}
防止盗链:
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.test.com *.test.com;
if ($invalid_referer) {
rewrite ^/(.*) http://www.test.com/error.html;
}
}
域名跳转:
#将所有对www.bac.com的访问跳转到www.test.com
server {
listen 80;
server_name www.test.com;
index index.html index.php
root /export /home/www
if ($host = "www.abc.com") {
rewrite ^/(.*)$ http://www.test.com/$1 permanent;
}
}
下一篇:nginx负载均衡
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
如何重写gorm日志(实现自定义慢sql打印)
gorm自定义日志格式,可实现慢sql自定义打印
sql SQL mysql