在nginx中,Rewrite用来实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
先来熟悉下,nginx中的if指令。
规则语法:
复制代码 代码示例:
if ($http_user_agent ~MSIE){
rewrite ^(.*)$/msie/$1
break;
}
if (!-f$request_filename){
rewrite ^/img/(.*)$/site/$host/images/$1 last;
}
其次是 rewrite 语法规则:
变量名:
变量名可以使用"="或"!="运算符
~ 符号表示区分大小写字母匹配
~* 符号表示不区分大小写字母匹配
!~ 和 !~ 与~ !~ 相反
-f 和 !-f 用来判断文件是否存在
-d 和 !-d 用来判断目录是否存在
-e 和 !-e 用来判断文件或目录是否存在
-x 和 !-x 用来判断文件是否可以执行
也支持$1到$9位置参数
return指令
示例:,如果访问的URL以.sh .bash 结尾,返回状态码403
复制代码 代码示例:
location ~ .*.(sh|bash)?$
{
return 403;
}
rewrite指令
rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种:
last :相当于
apache里德(L)标记,表示完成rewrite;
break;本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect:返回302临时
重定向,浏览器地址会显示跳转后的
url地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last和break用来实现URL重写,浏览器地址栏URL地址不变
实例:将访问/b跳转到/bbs目录上去:
复制代码 代码示例:
location /b {
autoindex on;
alias /usr/local/nginx/html/
redhat;
rewrite ^/b/?$ /bbs permanent;
}
location /bbs {
autoindex on;
alias /usr/local/nginx/html/bbs;
}
rewrite规则编写实例
1,将原来要访问/b的目录重写为/bbs
核心语句: rewrite ^/b/?$ /bbs permannet;
2,根据不同的浏览器将得到不同的结果。
复制代码 代码示例:
if ($http_user_agent ~ Firefox) {
rewrite ^(.*)$ /firefox/$1 break;
}
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_user_agent ~ Chrome) {
rewrite ^(.*)$ /chrome/$1 break;
}
3,防止盗链:
复制代码 代码示例:
location ~*.(gif|jpg|png|swf|flv)${
valid_referers none blocked www.jb200.com*.test.com;
if ($invalid_referer)
rewrite ^/(.*) http://www.jb200.com/error.html
}
4,实现域名跳转:
复制代码 代码示例:
server {
listen 80;
server_name jbxue.example.com;
write ^(.*)$ http://zhang.example.com/$1 permanent;
location / {
root html;
index index.html index.htm;
}
您可能感兴趣的文章:
nginx rewrite(nginx url地址重写)的配置示例
nginx中一些常用的 URL 重写方法
nginx配置url重写及自定义404错误页面等
Nginx常用的 URL 重写方法
超详细的 NGINX URL重写实例讲解