Nginx rewrite(nginx url地址重写)
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,若是须要Nginx的Rewrite功能,在编译Nginx以前,须要编译安装PCRE库。
经过Rewrite规则,能够实现规范的URL、根据变量来作URL转向及选择配置。
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.防止盗链:
根据Referer信息防止盗链,代码以下:
- location ~*\.(gif|jpg|png|swf|flv)${
- valid_referers none blocked www.cheng.com*.test.com;
- if ($invalid_referer)
- rewrite ^/(.*) http://www.cheng.com/error.html
- }
4.实现域名跳转:
- server {
- listen 80;
- server_name cheng.example.com;
- write ^(.*)$ http://zhang.example.com/$1 permanent;
- location / {
- root html;
- index index.html index.htm;
- }
http://blog.csdn.net/xifeijian/article/details/20955253html