Nginx:rewrite模块
参考:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
Rewrite对应URL Rewrite,即URL重写,就是把传入web的请求重定向到其他URL的过程。
nginx的重写模块rewrite是一个简单的正则表达式匹配与一个虚拟堆叠机结合,依赖于pcre库(这也为我们之前安装的时候为什么需要安装pcre和pcre-devel软件的原因)。
rewrite会根据相关变量重定向和选择不同的配置,从一个 location跳转到另一个 location,不过这样的循环最多可以执行10次,超过后 nginx将返回500错误。
说明:
- 功能:实现URL的重写,通过Rewrite规则,可以实现规范的URL,根据变量来做URL转向及选择配置。
- 作用范围:server{},location{},if{}
- 优先级:执行server块的rewrite指令 > 执行location匹配 >执行选定的location中的rewrite指令。
应用场景
- 根据特殊变量、目录、客户端的信息进行URL跳转等
- 网站换新域名后,让旧的域名的访问跳转到信息的域名上
- 为了让搜索引擎收录网站内容及用户体验更好,企业将动态URL地址伪装成静态地址提供服务
语法
return指令
停止处理并返回指定状态码(code)给客户端。
作用范围:server,location,if
语法格式:
1 | return code; |
1 | return code [text]; |
if指令
语法格式:
1 | if(condition){...} |
- 可作用于 server 和 location 块中。
- 一般可使用 字符串与变量做匹配 ‘=’ 和 ‘!=’ 。
- 也可以正则匹配 ‘
‘ 或 ‘!’。 - 检测文件是否存在’-f’ 或 ‘!-f’ ,目录则是 ‘-d’。
- 检查文件,目录,软链接是否存在’ -e’ 或者 ‘!-e’。
- 检查是否为可执行文件,使用’-x’ 或者 ‘!-x’。
示例:
1 | if ($http_user_agent ~ MSIE) { |
break指令
停止执行当前虚拟主机的后续rewrite指令集。
作用范围:server,location,if
示例:
1 | if ($slow) { |
rewrite 指令
rewrite 的语法是这样的,可以通过rewrite_log on;
记录rewrite。
1 | rewrite regex replacement [flag]; |
将regex指定的url替换成 replacement 这个新的url。
当replacement以 http:// 或者 $schema 开头,直接会返回302重定向。
替换后的url根据flag指定的方式进行处理。
- last:用replacement这个url 重新进行location匹配。
- break:break指令停止当前脚本的执行,不再匹配。
- redirect:返回302重定向。
- permanent:返回301重定向。
set指令
作用范围:server, location, if
语法格式:
1 | set $variable value; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 时间之旅!
评论