zoukankan      html  css  js  c++  java
  • Nginx重写

    一、location匹配
    
    1.分类:
    (1)正则location:~,~*
    (2)普通location:=,^~,@,无
    2.匹配规则:
    (1) =    精确匹配。如果找到,停止搜索
    (2) ^~    普通匹配,匹配路径的前缀,如果找到,停止搜索,不继续匹配正则
    (3) ~    正则匹配,区分大小写
    (4) ~*    正则匹配,不区分大小写
    (5) !~    正则不匹配,不区分大小写
    (6) !~* 正则不匹配,区分大小写
    (7) /      通用匹配,任何请求都会匹配到
    (8) @     命名location,内部重定向
    3.匹配顺序:
    (1)进行精确匹配(=),如果匹配上,停止搜索。否则继续下一步;
    (2)进行普通匹配,如果找到完整匹配路径停止搜索。否则继续下一步;
    (3)匹配最大前缀,如果它带有^~,停止搜索,否则记录这个最大前缀匹配,继续下一步;
    (4)进行正则匹配(~和~*),按顺序逐个匹配,如果匹配上,停止搜索,否则使用上一步记录的最大前缀匹配。
    4.优先级:
    (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 最大前缀匹配路径) > (/)
    二、目录/文件判断
    
    1.-f和!-f用来判断是否存在文件
    2.-d和!-d用来判断是否存在目录
    3.-e和!-e用来判断是否存在文件或目录
    4.-x和!-x用来判断文件是否可执行
    三、指令
    
    1.location 指令
    语法:location [=|~|~*|^~|@] URI {}
    作用域:server
    为匹配的URI进行配置,URI可以是字符串或正则表达式
    示例:
    
    location ~ .*.(gif|jpg|jpeg|png)$
    {
        expires 30d;
    }
    
    2.if 指令
    语法:if (){}
    作用域:server,location
    检查一个条件是否符合,如果条件符合,则执行大括号内的语句。不支持嵌套和多个条件&&或||处理
    示例:
    
    if ( !-e $request_filename )
    {
        rewrite  ^/(.*)$ index.php last;
    }
    
    3.try_files 指令
    语法:try_files file1 [file2 ... filen] URI 或 try_files file1 [file2 ... filen] =code
    作用域:server location
    按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
    注意,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。
    命名的location也可以使用在最后一个参数中。与rewrite指令不同,如果回退URI不是命名的location那么
    $args不会自动保留,如果你想保留$args,则必须明确声明 示例: try_files $uri $uri/ /index.php?$args; try_files $uri =404; 4.set 指令 语法:set variable value; 作用域:server,location,if 定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合 示例: set $a "hello world"; 5.break 指令 语法:break; 作用域:server,location,if 完成当前的规则集,不再处理rewrite指令 示例: location ~ ^/(cron|templates)/ { deny all; break; } 6.return 指令 语法:return code; 作用域:server,location,if 结束执行并返回状态码给客户端。 示例:如果访问的URI以".sh"或".bash"结尾,则返回403状态码 location ~ .*.(sh|flv|mp3)$ { return 403; } 7.rewrite 指令 语法:rewrite regex replacement flag; 作用域:server,location,if 根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意,重写表达式只对相对路径有效 示例: if( $host ~* www.(.*) ) { set $domain $1; rewrite ^(.*)$ http://$domain$1 permanent; } rewrite的flag标记: last 将rewrite后的地址重新在server标签执行,地址栏url不变。超过10次匹配不到报500错误。使用alias指令必须用last标记 break 直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变 redirect 返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url permanent 返回301永久重定向,地址栏显示重定向后的url,爬虫更新url,对搜索引擎友好
  • 相关阅读:
    用initconnect+binlog实现用户操作追踪【转】
    INSERT INTO … SELECT 的锁【转】
    Memcached 高可用方案 Repcached
    关于MySQL建表对DML的影响【转】
    NoSQL之【memcached】学习
    关于MySQL insert into ... select 的锁情况
    MySQL数据库诊断——InnoDB关机问题 【转】
    Your document is being created
    Failure to Get Sequential Numbering Profile Option
    Runtime error '1004'
  • 原文地址:https://www.cnblogs.com/wuheng1991/p/6958511.html
Copyright © 2011-2022 走看看