在哪里申请域名短视频seo营销系统
Nginx 的 rewrite 指令用于根据正则表达式来匹配请求的 URI,并将其重写为新的 URI。rewrite 指令可以包含一个可选的 flag(标志),该标志用于控制重写操作后的行为。
rewrite regex replacement [flag]
一. 常用四种 flag
- redirect(302 临时重定向)
- 当重写完成后,以临时重定向的方式返回重写后生成的新 URL给客户端,状态码为 302。
- 浏览器地址栏会显示跳转后的 URL 地址。
- permanent(301 永久重定向)
- 当重写完成后,以永久重定向的方式返回重写后生成的新 URL 给客户端,状态码为 301。
- 浏览器地址栏会显示跳转后的 URL 地址。
- break
- 重写完成后,停止对当前 URL 在当前 location 以及其他 location 中(当前 serve)后续的其它重写操作。
- 不会跳出 location 作用域,也不会重新搜索与更改后的 URI 相匹配的 location。
- 适用于一个 URL 一次重写的场景。
- last
- 重写完成后,停止对当前 URI 在当前 location 中后续的其它重写操作。
- 但会对新的 URL 启动新一轮重写检查,并可能跳出当前 location 作用域,搜索与更改后的 URI 相匹配的 location。
- 适用于一个 URL 可能需要多次重写的场景。
二. last 和 break 区别
server {listen 80;server_name pic.path-analytics.com;root /tmp/html/;location / {rewrite /1.html /2.html;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;}
}
情况一:无 flag
访问 http://pic.path-analytics.com/1.html,结果为:
执行顺序如下:
-
首先匹配 location
-
然后根据第一个 rewrite 将 URL 由 /1.html 改写为了 /2.html
-
此时并未重新发起请求,而是在当前 location 中查找是否有关于 /2.html 的 重写规则
-
查找到第二个 rewrite 将 URL 由 /2.html 改写成 /3.html,再去查找当前 locaiton 中是否还有 /3.html 的重写规则
-
没有找到,此时 URL 为 http://pic.path-analytics.com/3.html
-
再次去请求,匹配 location
-
进入该 location,将 URL 由 /3.html 改写为 /b.html。这个 location 中没有 /b.html 的改写规则,此时 URL 为 http://pic.path-analytics.com/b.html
-
再次去请求,匹配 location
-
但是该 location 中没有 /b.html 的匹配规则,所以直接响应 b.html
情况二:break
location / {rewrite /1.html /2.html break;rewrite /2.html /3.html;
}
访问 http://pic.path-analytics.com/1.html,结果为:
执行顺序如下:
- 首先匹配 location
- 执行第一个 rewrite 将 URL 由 /1.html 改写为 /2.html
- break 直接终止了当前 location 和其他 location 的匹配,返回 2.html
情况三:last
location / {rewrite /1.html /2.html last;rewrite /2.html /3.html;
}
访问 http://pic.path-analytics.com/1.html,结果为:
执行顺序如下:
- 首先匹配 location
- 执行第一个 rewrite 将 URL 由 /1.html 改写为 /2.html
- last 终止了当前 location 中的匹配,此时 URL 为 http://pic.path-analytics.com/2.html
- 再次去请求,匹配 location
- 根据 rewrite 将 URL 由 /2.html 改写为 /a.html,此时 URL 为 http://pic.path-analytics.com/a.html
- 再次去请求,匹配 location
- 该 location 中没有 /a.html 的匹配规则,所以直接响应 a.html
情况四:修改 location 优先级
在 location 中使用正则匹配
location ~ / {rewrite /1.html /2.html last;rewrite /2.html /3.html;
}
访问 http://pic.path-analytics.com/1.html,结果为:
执行顺序如下:
- 首先去匹配 location
- 根据第一个 rewrite 将 URL 由 /1.html 改写为 /2.html
- last 终止了当前 location 中的匹配,此时 URL 为 http://pic.path-analytics.com/2.html
- 再次去请求,由于 location 中正则匹配的优先级高于普通匹配,匹配 location
- 在该 location 中,根据 rewrite 将 URL 由 /2.html 改写为 /3.html,此时 URL 为 http://pic.path-analytics.com/3.html
- 再次去请求,由于 location 中正则匹配的优先级高于普通匹配,匹配 location
- 在该 location 中没有找到 /3.html 的重写规则,所以直接响应 3.html
三. 不同 flag 下浏览器与网络请求的不同表现
location / {rewrite /1.html /2.html [flag];rewrite /2.html /3.html;
}location /2.html {rewrite /2.html /a.html;
}