nginx rewrite重写

经过官方文档能够看到,rewrite的做用上下文是   server location,能够写在 server里面  亦或location里面;html

命令:nginx

if (条件) {} 条件判断
set #设置变量
return #返回状态码
break #跳出rewrite
rewrite #重写

条件:服务器

=  字符串比较
~  区分大小写正则
~* 不区分大小写正则
-f 是否为文件
-d 是否为目录
-e 是否存在
!  取反

例子:url

if ($requesy_method=POST) {
    return 405;
}
if ($http_user_agent ~ MSIE) {
    rewrite ^.*$ /ie.html;
    break;(若是不break,循环重定向)
}
访问一个不存在的页面 /xxx.html
if (!-e $document_root$fastcgi_script_name) {
    rewrite ^.*$ /404.html break ;
    # 晃眼一看以为这个地方不必break了,实际上这个地方仍是要加 break,不然循环重定向,解释:
    服务器内部的rewrite和302跳转不同,跳转的话url都变了,变成从新http请求 404.html,而内部rewrite,
    上下文没有变,就是说 fastcgi_script_name 任然是 xxx.html,所以 会循环重定向
}
若是是经过apt方式安装的nginx,可用的变量保存在
/etc/nginx/fastcgi_params

set 举例

if ( $http_user_agent ~* msie ) {
    set $isie 1;
}
if ( $fastcgi_script_name = ie.html ) {
    set $isie 0; 
}
if ( $isie 1 ) {
    rewrite ^.*$ ie.html;
}
相关文章
相关标签/搜索