一、Nginx rewrite概述
-
Rewite 规则作用
Rewrite规则可以实现对url的重写,以及重定向 -
作用场景:
- URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等
- SEO优化
- 维护:后台维护、流量转发等
- 安全,防止盗链,或禁止部分地址的访问
二、Nginx rewrite 语法
语法为if(condition){…} #对给定的条件condition进行判断。
如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:
a:当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false,其他情况为true。
b: 直接比较变量和内容时,使用 = 或!=
c: 正则表达式匹配,不区分大小写的匹配,!和!反之。
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log logs/host.access.log main;
if ( $request_uri = /credit ) {
rewrite /credit /credit/index.html last;
}
if ( $request_uri = /credit/) {
rewrite /credit/ /credit/index.html last;
}
location ~ /credit {
content_by_lua_file /usr/local/nginx/conf/front-lua/credit.lua;
}
location @credit_release {
root /usr/local/nginx/html/;
index index.html;
}
location @credit_stable {
root /usr/local/nginx/html/grey;
index index.html;
}
}
location /dwapi/fyfq-dataservice/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
rewrite ^/dwapi/fyfq-dataservice/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:5010;
}
三、关键字
- last
终止在本location块中处理接收到的URI,并将此处重写的URI作为新的URI使用其他location进行处理。(只是终止当前location的处理) - break
将此处重写的URI作为一个新的URI在当前location中继续执行,并不会将新的URI转向其他location。 - redirect
将重写后的URI返回个客户端,状态码是302,表明临时重定向,主要用在- replacement字符串不以“http://”,“ https://”或“ $scheme” 开头; - permanent
将重写的URI返回客户端,状态码为301,指明是永久重定向;
四、日志
该指令用于是否开启URL重写日志的输出,
语法:
rewrite_log on | off
默认是off,如果配置为on,URL重写的相关日志将以notice级别输出到error_log指令配置的日志文件中
五、防盗链
语法:valid_referers none | blocked | server_name | string ...;
这里表示请求头部Referer域是否匹配上面值,如果匹配了$invalid_referer 的值为0,没有相匹配就是1;
- none
表示Referer头域不存在的情况 - blocked
检测Referer头域的值被防火墙或者代理服务器删除或者伪装的情况,这种情况,该头域的值不以“http://”或者“https://”开头 - server_name
设置一个或者多个URL,检测Referer头域的值是否是这些URL中的某个
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.vison.com www.wsvison.com; #这里表示Referer头域中的值是none或者blocked或者后面这些网址才会返回去正常的gif|jpg|png|swf|flv文件,否则执行下面if块代码
if ($invalid_referer) { #上面没有匹配成功,$invalid_referer值为1,否则为0
return 404;
} //防盗链
}
网友评论