Nginx 重写功能(location / rewrite)

目录

一、Nginx常见模块

二、访问路由location

2.1 location常用正则表达式

2.2location的分类

2.3location 常用的匹配规则

2.4location优先级排列说明

2.5location 示例

2.6location 优先级总结

2.7实例

2.7.1location = / {} 与 location / {}

2.7.2 location = /index.html {} 与 location / {}

2.7.3location = /1.jpg {} 和 location ~* .(gif|jpg|png|jpeg)$ {}比较

2.7.4大小写问题

2.8实际网站使用中的三个匹配规则定义

第一个规则

第二个规则

第三个规则

三、REWRITE模块

3.1rewrite功能

3.2Rewrite 跳转场景

3.3Rewrite 跳转实现

3.4Rewrite 执行顺序

3.5Rewrite 语法格式

3.6 Rewrite 实例

3.6.1基于域名的跳转

3.6.2基于客户端IP 访问跳转

3.6.3基于旧域名跳转到新域名后面加目录

3.6.4基于参数匹配的跳转

3.6.5基于 目录下所有的php文件

3.6.6基于 普通的一条url


一、Nginx常见模块

  • http

    http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。

  • server

    server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。

  • location

    location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。

二、访问路由location

2.1 location常用正则表达式

匹配符 表示含义
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. 表示任意一个字符
\转义字符 用于取消特殊符号的含义
\d 匹配纯数字
\s 匹配空的(空格或者制表符)
{n} 匹配前面的子表达式n次
{n,} 匹配前面的子表达式不少于n次
{n,m} 匹配前面的子表达式n到m次
[ ] 匹配括号中的一个字符
[c] 匹配单个字符 c
[a-z] 匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] 匹配所有大小写字母或数字
() 表达式的开始和结束位置
| 或运算符

2.2location的分类

  • 精准匹配:location = / {}

  • 一般匹配:location / {}

  • 正则匹配:location ~ / {}

2.3location 常用的匹配规则

规则表达式 规则含义
= 进行普通字符精确匹配。也就是完全匹配
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location
~ 表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
!~ 表示执行一个正则匹配,区分大小写不匹配
!~* 表示执行一个正则匹配,不区分大小写不匹配

2.4location优先级排列说明

  1. 首先精确匹配 =

  2. 其次前缀匹配 ^~

  3. 其次是按文件中顺序的正则匹配 ~或~*

  4. 然后匹配不带任何修饰的前缀匹配

  5. 最后是交给 / 通用匹配

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

2.5location 示例

(1)精确匹配

location = / {}
=为精确匹配 / , 主机名后不能携带任何字符串,比如 / 和 /data ,则/匹配,/data不匹配

(2)一般匹配/通用匹配

location / {}
代表以/开头,所以这条规则将匹配所有的请求
location /documents/ {}
匹配任何以/documents/开头的地址,匹配符合后,还会继续往下搜索其他 location,只有其它location后面的正则表达式没有匹配到时,才会用这一条
location /documents/abc {}
匹配任何以/documents/abc开头的地址,匹配符合后,还会继续往下搜索其他 location,只有其它location后面的正则表达式没有匹配到时,才会用这一条

(3)正则匹配

location ^~ /images/ {} 
匹配任何已/images/ 开头的地址,匹配符合后,停止往下搜索,采用这一条
location ~* \.(gif|jpg|jpeg)$ {} 
匹配所有 gif jpg 或 jepg 结尾的请求
如果 有上面的location ^~ /images/ {}匹配  则会先匹配上一请求,所以到不了这一条。

2.6location 优先级总结

如果是匹配某个具体文件: (location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) >(location ~ 完整路径) > (location /)通用匹配

2.7实例

2.7.1location = / {} 与 location / {}

实例1:location = / {} 和 location / {} ,按道理应匹配前者,但实际确实匹配后者,匹配只写域名精确匹配不生效,接下来一个小例子说明一下

1. #在配置文件添加匹规则
vim  /usr/local/nginx/conf/nginx.conf

#添加的网页
        location = / {     
            root   /web/dog/;
        }

#默认网页
        location / {
            root   html;
            index  index.html index.htm;        }

2. #新建网页站点目录
mkdir -p /web/dog

3. #在站点目录下新建index.html
vim /web/dog/index.html

this is dog web

4. #检查语法并重启
nginx -t
systemctl restart nginx.service 

5. #在网页中测试
http://192.168.59.118/

在配置文件添加匹规则

新建网页站点目录,新建index.html文件

检查语法并重启

 

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值