nginx URL重写

来源:互联网 发布:python培训班wuhan 编辑:程序博客网 时间:2024/06/06 16:37

rewrite 主要功能就是实现URL重写,nginx的rewrite规则采用PCRE Perl兼容正则表达式的语法规则匹配,

如果需要Nginx的rewrite功能,在编译nginx之前,需要编译安装PCRE库。

通过rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。


if指令

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

使用环境:server,location

该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。

if指令不支持嵌套,不支持多个条件&&和||处理

其中,condition中可以包含的判断标识如下:

~区分大小写匹配

~*不区分大小写匹配

!~区分大小写不匹配

!~*不区分大小写不匹配

-f 和 !-f 用来判断是否存在文件

-d 和 !-d 用来判断是否存在目录

-e 和 !-e  用来判断是否存在文件或目录

-x 和 !-x  用来判断是否可执行


如下:如果是IE浏览器就进行跳转

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


return指令

语法:return code

使用环境:server,location, if

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

状态码包括:

204(no content)

400(bad request)

402(payment required)

403(forbidden)

404(not found)

405(method not allowed)

406(not acceptable)

408(request timeout)

410(gone)

411(length required)

413(request entity too large)

416(requested range not satisfiable)

500(internal server error)

501(not implemented)

502(bad gateway)

503(service unavailable)

504(gateway timeout)


如下,如果访问的URL以.sh .bash结尾,返回状态码给403

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


set指令

语法:set variable value

使用环境:server,location, if

该指令用于定义个变量,并给变量赋值


rewrite指令

语法:rewrite regex replacement flag

使用环境:server,location, if

该指令根据表达式来重定向URI,或者修改字符串

flag标记有:

last相当于apache里的[L]标记,表示完成rewrite

break终止匹配,不再匹配后面的规则

redirect返回302临时重定向,地址栏会显示跳转后的地址

permanent返回301永久重定向,地址栏会显示跳转后的地址

示例,将www重定向到http://

if ($host ~* www\.(.*)){  set $host_without_www $1;  rewrite ^(.*)$ http://$host_without_www$1 permanent;}

使用案例
域名永久重定向

rewrite ^(.*)$  http://blog.720ui.com permanent;



当访问的文件和目录不存在时,重定向到某个HTML文件

if ( !-e $request_filename ){  rewrite ^/(.*)$ error.html last;}



访问目录跳转

将访问/b跳转到/bbs目录上去

rewrite ^/b/?$ /bbs permanent;


目录对换

/123456/xxxx  ====>   /xxxx?id=123456rewrite ^/(d+)/(.+)/  /$2?id=$1 last;


根据不同的浏览器将得到不同的结果

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;  }


防止盗链

根据referer信息防止盗链

location ~*\.(gif|jpg|png|swf|flv)${    valid_referers none blocked www.cheng.com*.test.com;    if ($invalid_referer)      rewrite ^/(.*) http://www.lianggzone.com/error.html           }


禁止访问/data开头的文件

location ~ ^/data{  deny all;}


禁止访问以.sh .exe为文件后缀名的文件

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


设置某些类型文件的浏览器缓存时间

location ~ .*.(gif|jpg|jpeg|png|bmp)${  expires 30d;}location ~ .*.(js|css)${  expires 1h;}


设置过期时间并不记录404错误日志

favicon.ico过期时间为99天,
robots.txt 为7天 不记录404错误日志
location ~(favicon.ico) {  log_not_found off;  expires 99d;  break;}location ~(robots.txt) {  log_not_found off;  expires 7d;  break;}



设置过期时间并不记录访问日志

这里是600秒,并不记录访问日志

location ^~ /html/scripts/loadhead_1.js {  access_log   off;  root /opt/lampp/htdocs/web;  expires 600;break;}






0 0
原创粉丝点击