柳暗花明笔记

    Nginx泛域名解析及Rewrite重定向普通页面及带参数的页面

    所属分类:[ linux&mysql ] 猫哲学家 发表于:2012-08-01 23:23 浏览:443

    静态地址重定向到带参数的动态地址

    rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent;

    带参数的动态地址重定向到静态地址

    if ($query_string ~* id=(.*)) {
        set $id $1;
        rewrite "^(.*)/article.asp$" $1/article/$id.htm last;
    }

    泛域名解析

    server_name www.w3cgroup.com *.w3cgroup.com;
    server_name_in_redirect off;
    #设置默认root
    set $rootdir /usr/local/nginx/html/w3cgroup/;
    #匹配三级域名
    if ($host ~* ^([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)$) {
        set $rootdir /usr/local/nginx/html/w3cgroup/$2/$1;
        #三级域名中有访问指定的目录则重定向到相应的二级域名下
        rewrite "^.+upload/?(.*)$" http://upload.w3cgroup.com/$1 permanent;
        rewrite "^.+ijc/?(.*)$" http://ijc.w3cgroup.com/$1 permanent;
        break;
    }
    #匹配二级域名
    if ($host ~* ^([^\.]+)\.([^\.]+)\.([^\.]+)$) {
        set $rs1 $1;
    }
    #设置www时root
    if ($rs1 ~* ^www$) {
        set $rootdir /usr/local/nginx/html/platform_ig/;
        #二级域名中有访问指定的目录则重定向到相应的二级域名下,注意,这里要使用last
        rewrite "^.+upload/?(.*)$" upload/$1 last;
        rewrite "^.+ijc/?(.*)$" ijc/$1 last;
        break;
    }
    #设置非www二级域名时root
    if ($rs1 !~* ^www$) {
        set $rootdir /usr/local/nginx/html/w3cgroup/$rs1;
        #二级域名中有访问指定的目录则重定向到相应的二级域名下
        rewrite "^.+upload/?(.*)$" http://upload.w3cgroup.com/$1 permanent;
        rewrite "^.+ijc/?(.*)$" http://ijc.w3cgroup.com/$1 permanent;
        break;
    }
    #应用root
    root $rootdir;
    index index.php index.html;
    error_page 404 http://$host/;

    注意:if () {} 之间需要空格,否则Nginx.conf会报unknow directive 错误!

    参考:

     

    Nginx Rewrite Flags
    * last 相当于Apache里的[L]标记,表示完成rewrite
    * break 终止匹配, 不再匹配后面的规则
    * redirect 返回302临时重定向
    * permanent 返回301永久重定向

    Nginx正则表达式匹配
    * ~ 为区分大小写匹配
    * ~* 为不区分大小写匹配
    * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

    Nginx文件及目录匹配
    * -f和!-f用来判断是否存在文件
    * -d和!-d用来判断是否存在目录
    * -e和!-e用来判断是否存在文件或目录
    * -x和!-x用来判断文件是否可执行

    Nginx全局变量
    $args
    $content_length
    $content_type
    $document_root
    $document_uri
    $host
    $http_user_agent
    $http_cookie
    $limit_rate
    $request_body_file
    $request_method
    $remote_addr
    $remote_port
    $remote_user
    $request_filename
    $request_uri
    $query_string
    $scheme
    $server_protocol
    $server_addr
    $server_name
    $server_port
    $uri

    标签: nginx 
    上一编文章 Mysql主从复制配置 下一编文章 drupal 7 page arguments 必须是数组
    最近文章
    发表评论