nginx rewrite

2013-09-10 00:00:09 0  category: nginx

Nginx Rewrite 规则指令


if , rewrite , set break


rewrite ^/xlxz/(.*)\.html /xlxz.php?php=$1 break;


if ( !~f $request_filename )
{
rewrite ^/xlxz_img/(.*)$ /site_php/$host/images/$1 last;
}


1, Nginx Rewrite break 指令


语法    break;

默认值  none;

使用环境 server , location if


范例 :


if ($slow)
{
limit_rate 10k;
break;
}



2, Nginx Rewrite if 指令


语法: if ( condition ) {...}

默认值 : none

使用环境 : server , location;


条件信息

   1,变量名,错误的值包括: 空字符串"", 或 任何以0开始的字符串.

   2,     = 等于   !=  不等于

   3,     ~*    ~  正则表达式

   4,    ~  区分大小写字母匹配

   5,    ~* 不区分大小写字母匹配

   6,    !~  !~*    和  ~   ~*  相反

   7,   ~f   !~f    文件是否存在

   8,   ~d   !~d    目录是否存在

   9,   ~e   !~e    文件或目录是否存在

   10,    ~x   !~x   文件是否可执行

范例 :


if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie_php/$1 break;
}

if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
set $id $1;
}

if ($request_method = POST ) {
return 405;
}

if ($slow) {
limit_rate 10k;
}

if ($invalid_referer) {
return 403;
}

if ($args ~ post=140){
rewrite ^ http://www.php-php.com/ permanent;
}




3, Nginx Rewrite return 指令


语法    return code

默认值  none;

使用环境 server, location, if


该指令结束规则的执行并返回状态码给客户端


范例


location ~ .*\.(sh|bash)?$
{
return 403;
}



4, Nginx Rewrite 指令


语法    rewrite regex replacement [ flag ]

默认值  none;

使用环境 server, location, if


范例 :


rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;



location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}



rewrite "/photos/([0-9]{2})([0-9]{2})([0-9]{2})" /path/to/photos/$1/$1$2/$1$2$3.png;