首页 > CentOS > nginx中location及rewrite配置

nginx中location及rewrite配置

来源:原创 作者:thomas 分类:CentOS 阅读:616 日期:2014-08-12

Nginx Location配置总结

语法规则: location [=|~|~*|^~] /uri/ { … }

  1. = 精确匹配
  2. ~ 为区分大小写匹配
  3. ~* 为不区分大小写匹配
  4. ^~ 普通字符匹配,如果该选项匹配,nginx停止搜索其他匹配,一般用来匹配目录
  5. !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
匹配规则优先级:
首先匹配 =,其次匹配^~, 再其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

Rewrite规则:

文件及目录匹配,其中:

  1. -f和!-f用来判断文件是否存在
  2. -d和!-d用来判断目录是否存在
  3. -e和!-e用来判断文件或目录是否存在
  4. -x和!-x用来判断文件是否可执行

flag标记有:

  1. last 相当于Apache里的[L]标记,表示完成rewrite
  2. break 终止匹配, 不再匹配后面的规则
  3. redirect 返回302临时重定向 地址栏会显示跳转后的地址
  4. permanent 返回301永久重定向 地址栏会显示跳转后的地址

一些可用的全局变量有,可以用做条件判断(待补全)

  1. $args #请求行中的参数
  2. $content_length #请求头中的Content-length字段
  3. $content_type #请求头中的Content-Type字段
  4. $document_root #当前请求在root指令中配置的值
  5. $document_uri #不带参数的请求uri,且不包含主机名,如“foo/bar.php”
  6. $host #请求头中的主机字段,否则为服务器名称
  7. $http_user_agent #客户端agent信息
  8. $http_cookie #客户端cookie信息
  9. $limit_rate #该变量可限制连接速率
  10. $request_body_file #客户端请求主体信息的临时文件名
  11. $request_method #客户端请求的动作,通常为GET或POST
  12. $remote_addr #客户端的IP地址
  13. $remote_port #客户端的端口号
  14. $remote_user #已经通过Auth Basic Module验证的用户名
  15. $request_filename #当前请求的文件路径,有root或alias指令与uri拼接而成
  16. $request_uri #包含请求参数的原始uri,不包含主机名,如“foo/bar.php?arg=baz”
  17. $query_string #与$args相同
  18. $scheme #请求协议规则,如http或https
  19. $server_protocol #请求协议,通常为HTTP/1.0或HTTP/1.1
  20. $server_addr #服务器地址
  21. $server_name #服务器名称
  22. $server_port #服务器端口
  23. $uri #不带参数的请求uri,且不包含主机名,如“foo/bar.php”
例:http://localhost:88/test1/test2/test.php
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:/var/www/html
$request_filename:/var/www/html/test1/test2/test.php
示例:

1、多目录转成参数
    abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2

  1. if ($host ~* (.*)\.domain\.com) {
  2.     set $sub_name $1;   
  3.     rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
  4. }

2、目录对换
    /123456/xxxx -> /xxxx?id=123456

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

3、禁止htaccess

  1. location ~/\.ht {
  2.     deny all;
  3. }

设定某个文件的过期时间;这里为600秒,并不记录访问日志

  1. location ^~ /html/scripts/loadhead.js {
  2.     access_log   off;
  3.     root /opt/lampp/htdocs/web;
  4.     expires 600;
  5.     break;
  6. }

十日谈技术博客

 

热门文章 更多>

微信扫一扫,关注技术十日谈