目录
rewrite 作用:
依赖:
打开重定向日志:
if 判断:
location {} 本身有反复匹配执行特征
在 location 中加入 break 和 last (不一样)
加了break后,立刻停止向下 且 跳出。
加了last,会停止当前向下后,会重头再来一遍。
在 server 中加入 break 和 last (一样)
rewrite 作用:
域名跳转(重定向) URL重写(伪静态)(一长串参数很复杂的链接 跳转 到简介的链接上) 动静分离(跳转域名然后接入CDN实现加速,
这种情况较多,对于大流量的网站相对鸡肋,但对于小网站很实用)
依赖:
PCRE库 ,因为要用到正则表达式 ngx_http_rewrite_module 需要编译入的模块
配置 rewrite重定向日志:
1) rewrite_log on;
2)错误日志中 必须开启 notice 记录等级,然后rewrite会被写入到error.log中
if 判断
依靠nginx内置非自定义变量, 如 $request_method、 request_uri 逻辑判断符号 ~ 匹配(正则表达式) ~*
不区分大小写匹配(正则表达式) 匹配的字符串可以是正则表达式,通常不用加引号,仅在表达式中有特殊符号( 空格、花括号、分号等时)用单引号括起来。
- 限制 请求的浏览器 为 MSIE或firefox或spider
当不确定浏览器名时候可以用 ~* 来忽略大小写。
\d 代表数字 {9,12} 代表范围 ,即当 gid 等于 9至12个数字开头,/ 结尾,的时候就是符合的。
location {} 本身有反复匹配执行特征
如下,当是www.lwjweb.com/1.html 时候,会先匹配 location / 里的变为 www.lwjweb.com/3.html —— 出来匹配到 /3.html 变为 www.lwjweb.com/a.html 。 这时候又会从头匹配到 location / ,只是进去以后没有对应的rewrite ,这时匹配才结束。 server { location / { rewrite /1.html /2.html ; rewrite /2.html /3.html ; } location /3.html { rewrite a.html } } 例: rewrite 一个1.html转2.html ,2.html转3.html的例子 多个rewrite会根据上一步结果依次执行

错误日志中可见,1.html 匹配到了/1.html 转换为了2.html,2.html 匹配到了/2.html 转换为了3.html,
3.html 最后还再次匹配进了 / ,进行了 /1.html 和 /2.html 的对比,但是没有匹配成功。
break、last 可用来防止反复rewrite
在 location 中加入 break 和 last (不一样)
不但这个location不会执行,外面的其他location也不会执行,就此停止。

server { location / { rewrite /1.html /2.html last; rewrite /2.html /3.html ; } location /2.html { rewrite a.html } } #结果是/a.html
当是www.lwjweb.com/1.html 时候,会先匹配 location / 里的 /1.html 的变为 www.lwjweb.com/2.html ,被 last 打断,重头再来,再同时匹配到 / 和 /2.html ,但因为/2.html 更为准确因此会走 /2.html ,变为 www.lwjweb.com/a.html 。 这时候又会从头匹配到 location / ,只是进去以后没有对应的rewrite ,这时匹配才结束。
在 server 中加入 break 和 last (一样)
不在location中的话,2个都不会重复运行。