重写中用到的指令

if  (条件) {}  设定条件,再进行重写

set #设置变量

return #返回状态码  return 403;

break #跳出rewrite

rewrite #重写

If  语法格式

If 空格 (条件) {

重写模式

}

条件又怎么写?

答:3种写法

1: “=”来判断相等, 用于字符串比较

2: “~” 用正则来匹配(此处的正则区分大小写)

~* 不区分大小写的正则

3: -f -d -e来判断是否为文件,为目录,是否存在.

例子:

if  ($remote_addr = 192.168.1.100) {

return 403;

}

if ($http_user_agent ~ MSIE) {

rewrite ^.*$ /ie.htm;

break; #(不break会循环重定向)

}

if (!-e $document_root$fastcgi_script_name) {

rewrite ^.*$ /404.html break;

}

注, 此处还要加break,

注意:用url重写时, 正则里如果有”{}”,正则要用双引号包起来

重新中的一个()内的正则代表后面的一个变量$1,多个(),代表多个$1,$2 变量,这叫 正则表达式的后向引用

nginx的rewrite规则参考:

  1. ~ 为区分大小写匹配
  2. ~* 为不区分大小写匹配
  3. !~和!~*分别为区分大小写不匹配及不区分大小写不匹
  1. -f和!-f用来判断是否存在文件
  2. -d和!-d用来判断是否存在目录
  3. -e和!-e用来判断是否存在文件或目录
  4. -x和!-x用来判断文件是否可执行
  1. last 相当于Apache里的[L]标记,表示完成rewrite,呵呵这应该是最常用的
  2. break 终止匹配, 不再匹配后面的规则
  3. redirect 返回302临时重定向 地址栏会显示跳转后的地址
  4. permanent 返回301永久重定向 地址栏会显示跳转后的地址

nginx有以下内置变量

$args, 请求中的参数;

$content_length, HTTP请求信息里的"Content-Length";

$content_type, 请求信息里的"Content-Type";

$document_root, 针对当前请求的根路径设置值;

$document_uri, 与$uri相同;

$host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;

$limit_rate, 对连接速率的限制;

$request_method, 请求的方法,比如"GET"、"POST"等;

$remote_addr, 客户端地址;

$remote_port, 客户端端口号;

$remote_user, 客户端用户名,认证用;

$request_filename, 当前请求的文件路径名

$request_body_file

$request_uri, 请求的URI,带查询字符串;

$query_string, 与$args相同;

$scheme, 所用的协议,比如http或者是https,比如rewrite  ^(.+)$  $scheme://example.com$1  redirect;

$server_protocol, 请求的协议版本,"HTTP/1.0"或"HTTP/1.1";

$server_addr, 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);

$server_name, 请求到达的服务器名;

$server_port, 请求到达的服务器端口号;

$uri, 请求的URI,可能和最初的值有不同,比如经过重定向之类的。

这些变量可以用在rewrite规则里,也可以打印日志的时候用

最新文章

  1. OpenCV人脸识别Eigen算法源码分析
  2. 用户故事驱动的敏捷开发 – 2. 创建backlog
  3. Mysql字符类型比较
  4. PHP路径常量和函数解释
  5. 最短路径(Floyd)算法
  6. 10个优秀的JavaScript Web UI库/框架推荐
  7. JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇
  8. 【LeetCode】228 - Summary Ranges
  9. DIV+CSS列表式布局(同意图片的应用)
  10. [AngularJS - app] AngularJS Location-picker app
  11. Oracle 判断 并 手动收集 统计信息 脚本
  12. ajax 实现页面加载和内容的删除
  13. CubeMX使用及感受
  14. 竞赛基础篇---部分和问题(DFS)
  15. npm ERR! asyncWrite is not a function
  16. vue 项目界面绘制_stylus_iconfont_swiper
  17. ES6躬行记(9)——字符串
  18. IniHelper
  19. 类的三大方法 与__init___
  20. CSS 所有样式属性大复习

热门文章

  1. explicit 构造函数
  2. ubuntu打开终端多开标签的快捷键是ctrl+ shift+ T 对比ctrl+ alt+ T 另外窗口打开一个终端
  3. [Java]事件驱动程序设计
  4. java中双向链表的增、删、查操作
  5. 挑战--asp.net 文件夹上传
  6. gen_server2 与gen_server的对比
  7. InitialContext和lookup
  8. 什么是scale up和scale out
  9. php 前台post多维数组
  10. vuforia 中摄像机的开启与关闭