0%

nginx指令之rewrite

ngx_http_rewrite_module模块用来使用正则表达式(PCRE)改变请求的URI,返回重定向,并有条件地选择配置。

一、概念

      Nginx由内核和模块组成:内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作;Nginx的功能如此强大是因为它有非常多的模块来支撑,Nginx本身包含很多模块,用户也可以根据自己的需求开发模块。

      Nginx模块从结构上分为:基础模块、核心模块和第三方模块。第三方模块从功能上又可以分为Handlers处理器模块:直接处理请求,并进行输出内容和修改headers信息等操作,一般只有一个;Filters过滤器模块:主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出;Proxies代理类模块:此类模块是Nginx的HTTP Up-stream之类的模块,主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。其中,ngx_http_rewrite_module模块用来使用正则表达式(PCRE)改变请求的URI,返回重定向,并有条件地选择配置。

二、相关指令

  1. 语法rewrite regex replacement [flag];
    • regex,正则表达式,这个太重要了,好多地方都会用到
    • replacement,重写后的内容,即替代前面的regex
    • flag,可选参数,根据具体情况使用,常见如下:
      • last,本条规则匹配完成后继续向下匹配新的location
      • break,本条规则匹配完成后终止,不再匹配任何规则
      • redirect,返回302临时重定向
      • permanent,返回301永久重定向

三、实战

  1. 永久重/临时定向
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
## 编辑hosts文件,加入以下内容
127.0.0.1 rewrite.com
127.0.0.1 nginx.com

## 编辑nginx配置文件,加入以下内容(或者使用多个子配置文件)
server {
listen 80;
server_name nginx.com;
location / {
root /your_path/nginx
index index.php index.html index.htm;
}
}

server {
listen 80;
server_name rewrite.com;
location / {
root /your_path/rewrite;;
rewrite ^/(.*) http://nginx.com permanent;
#rewrite ^/(.*) http://nginx.com redirect;
index index.php index.html index.htm;
}
}

## 重启nginx
nginx -s reload

## 浏览器访问,command + option + i审查元素
rewrite.com

Status Code: 301 Moved Permanently
Status Code: 302 Moved Temporarily

四、参考

  1. Alphabetical index of directives
  2. 参考二