跳至主要內容

核心指令rewrite

刘春龙原创...大约 4 分钟LinuxNginxWEB服务器教程文档

先了解两个概念:地址重写与地址转发

地址重写

地址重写是实际上是为了实现址标准化,就像访问www.baidu.cn可以出现www.baidu.com的首页,服务器会把www.baidu.cn重写成www.baidu.com,浏览器的地址栏也会显示www.baidu.com

地址转发

地址转发一般发生在同一站点项目内,而地址重写则没有限制

提示

地址转发后客户端浏览器地址栏中的地址显示是不改变的;而地址重写后客户端浏览器地址栏中的地址改变为服务器选择确定的地址。

在一次地址转发整个过程中,只产生一次网络请求;而一次地址重写一般会产生两次请求。地址转发一般发生在同一站点项目内;而地址重写没有该限制。

地址转发的速度较地址重定向快。

地址转发过程中,可以将客户端请求的 request 范围内的属性传递给新的页面,但地址重写不可以。

rewrite 常用全局变量

变量说明
$args请求中的参数,如www.123.com/1.php?a=1&b=2open in new window的$args 就是 a=1&b=2
$body_bytes_sent服务器发送给客户端的响应 body 字节数
$content_lengthHTTP 请求信息里的"Content-Length"
$conten_typeHTTP 请求信息里的"Content-Type"
$document_rootnginx 虚拟主机配置文件中的 root 参数对应的值
$document_uri当前请求中不包含指令的 URI,如www.123.com/1.php?a=1&b=2open in new window的$document_uri 就是 1.php,不包含后面的参数
$http_referer记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置
$host主机头,也就是域名
$http_user_agent客户端的详细信息,也就是浏览器的标识,用 curl -A 可以指定
$http_cookie客户端的 cookie 信息
$http_x_forwarded_for当前端有代理服务器时,设置 web 节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的 x_forwarded_for 设置
$limit_rate如果 nginx 服务器使用 limit_rate 配置了显示网络速率,则会显示,如果没有设置, 则显示 0
$remote_addr客户端的公网 ip
$remote_port客户端的 port
$remote_user如果 nginx 有配置认证,该变量代表客户端认证的用户名
$request请求的 URI 和 HTTP 协议,如“GET /article-10000.html HTTP/1.1”
$request_body_file做反向代理时发给后端服务器的本地资源的名称
$request_method请求资源的方式,GET/PUT/DELETE 等
$request_filename当前请求的资源文件的路径名称,相当于是documentroot/document_root/document_uri 的组合
$request_uri请求的链接,包括$document_uri 和 $args
$scheme请求的协议,如 ftp,http,https
$server_protocol客户端请求资源使用的协议的版本,如 HTTP/1.0,HTTP/1.1,HTTP/2.0 等
$server_addr服务器 IP 地址
$server_name服务器的主机名
$server_port服务器的端口号
$statushttp 状态码,记录请求返回的状态码,例如:200、301、404 等
$uri和 $document_uri 相同
$http_referer客户端请求时的 referer,通俗讲就是该请求是通过哪个链接跳过来的,用 curl -e 可以指定
$time_local记录访问时间与时区,如 18/Jul/2014:17:00:01 +0800

该指令通过正则表达式的使用来改变 URI。可以同时存在一个或者多个指令,按照顺序依次对 URL 进行匹配 和 处理。

该指令可以在 server 快或者 location 块中配置,其语法结构为:

rewrite regex replacement [flag];
关键字  正则  替代内容   flag标记

注意

regex,用于匹配 URI 的正则表达式。使用括号 "()" 标记要截取的内容。

常用正则表达式

字符描述
\将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或者多次
+匹配前面字符串一次或者多次
?匹配前面字符串的零次或者一次
.匹配除“\n”之外的所有单个字符
(pattern)匹配括号内的 pattern

rewrite 最后一项 flag 参数

标记符号说明
last本条规则匹配完成后继续向下匹配新的 location URI 规则
break本条规则匹配完成后终止,不在匹配任何规则
redirect返回 302 临时重定向
permanent返回 301 永久重定向

域名跳转

无论/search 后面跟什么内容,最后都会被永久重定向到百度页面

server {
      listen   80;
      server_name  localhost;
      location /search {
          rewrite  ^/(.*)  http://baidu.com permanent;
      }
}

访问:http://47.92.214.203/searchopen in new window

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7