首页 > 系统相关 >nginx rewrite重写

nginx rewrite重写

时间:2022-11-17 18:22:40浏览次数:45  
标签:www 匹配 rewrite nginx html location 跳转 重写

 

 

一 location与rewrite常用的正则表达式

二  location与rewrite的联系和区别

三 location的匹配规则

3.1 location的匹配分类与常用规则

 3.2location 示例说明与规则优先实验

实验1 基于域名的跳转

实验2 基于客户端 IP 访问跳转

 

 

 

 

一 location与rewrite常用的正则表达式

符号 作用

^ 匹配输入字符串的起始位置

$ 匹配输入字符串的结束位置

* 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

+ 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”

? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”

. 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式

\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”

\d 匹配纯数字[0-9]   \s :空白符    \w :任意单词字符包括下划线[A-Za-z0-9_]

{n} 重复 n 次

{n,} 重复 n 次或更多次

{n,m} 重复 n 到 m 次

[ ] 定义匹配的字符范围

[c] 匹配单个字符 c

[a-z] 匹配 a-z 小写字母的任意一个

[a-zA-Z0-9] 匹配所有大小写字母或数字

() 表达式的开始和结束位置

| 或运算符

二  location与rewrite的联系和区别

rewrite :对访问的域名或者域名内的URL路径地址重写

location:对访问的路径做访问控制或者代理转发

从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。

 三 location的匹配规则

3.1 location的匹配分类与常用规则

location 大致可以分为三类:精准匹配" location = / {...} "   ,一般匹配" location / {...} "和正则匹配" location ~ / {...} "。在nginx.conf的配置文件中location默认使用的是通用匹配 "location /{.....}"。

 location的匹配规则 规则作用

= 进行普通字符精确匹配,也就是完全匹配。

^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它正则匹配的location。

~ 区分大小写的正则匹配。

~* 不区分大小写的正则匹配。

!~ 区分大小写的正则匹配取非。

!~* 不区分大小写的正则匹配取非。

 3.2location 示例说明与规则优先实验

示例一:精准匹配

location = / {

root /var/www/html

 }

 =为精确匹配 / ,主机名后面不能带任何字符串,例如想访问该location制定的匹配网页时,只能访问该主机IP或域名下的"/"(网页也只能存放在/var/www/html/ 下),而像"/abc,/data,/test"这一类和location等于号后面路径有任何一点差别的,都不会被匹配到。该匹配方式优先级最高,一旦匹配成功则立即采用

示例二:通用匹配

location / {

root /var/www/html

}

 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求.用户只要是能访问到该主机的IP或域名,即使不输入路径,也能匹配到相关的网页信息。(文件只要是存放在/var/www/html 中,或则更深的目录也能被匹配到。例如:/var/www/html/test/ 下存放网页,用户访问/test 也能够匹配访问到相关网页)该匹配方式为location匹配中优先级最低的方式,只有其他location匹配方式均为成功,才会采用该方式

示例三:一般匹配

#匹配规则a:

location /documents/ {

root  /var/www/html

index index.html

}

#匹配规则b:

location /documents/abc {

root  /aaa/bbb/ccc

index index.html

}

匹配规则a:匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location只有其它 location后面的前缀路径没有匹配到时,才会采用这一条

匹配规则b:匹配任何以 /documents/abc 开头的地址,匹配符合以后。还要继续往下搜索其它 location只有其它 location后面的前缀路径没有匹配到时,才会采用这一条

配置设置:

该实验阶段建议实验结束后,将匹配规则a和匹配规则b的上下关系进行调换再实验一次(实验两次,排除优先级是因为上下顺序导致的)

 

实验1 基于域名的跳转

 

 

 过程中有错误,由于最开始的没有建立文件

修改的配置文件内容

server {
listen 80;
server_name www.kgc.com;
charset utf-8;
access_log logs/access.log;
location / {
if ($host = 'www.kgc.com'){
rewrite ^/(.*)$ http://www.benet.com/$1 permanent;
}
root html;
index index.html index.htm;
}
}

 

  输入http://www.kgc.com/test/1.html

会跳转到www.benet.com/test/1.html,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。

 

实验2 基于客户端 IP 访问跳转

 

 

 

 

 

Rewrite 重写功能

rewrite 的功能介绍

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。

比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,

例如 http://www.yang.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写。

 rewrite的跳转实现与执行顺序

rewrite跳转实现:

Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else

跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误

PCRE支持:perl兼容正则表达式的语法规则匹配

重写模块 set 指令:创建新的变量并设其值

 

 

rewrite在nginx.conf 中的语法格式

语法格式:rewrite <regex> <replacement> [flag];

 regex :表示正则匹配规则。

replacement :表示跳转后的内容。

flag :表示 rewrite 支持的 flag 标记。

 

 ###flag标记说明###
last :本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中。
break :本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中。
redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

 

标签:www,匹配,rewrite,nginx,html,location,跳转,重写
From: https://www.cnblogs.com/123456789SI/p/16886318.html

相关文章

  • Nginx优化与防盗链
    Nginx优化与防盗链  目录前言一、隐藏版本号二、修改Nginx用户和组三、配置Nginx网页缓存时间四、实现Nginx的日志切割五、配置Nginx实现连接超时六、更改N......
  • Nginx重写功能
    一、常用的Nginx正则表达式字符涵义以及示例^匹配输入字符串的起始位置$匹配输入字符串的结束位置*匹配前面的字符零次或多次;如“ol*”能匹配“o”及“......
  • Nginx优化与防盗链
    导图一.Nginx优化①可以使用Fiddler工具抓取数据包,查看Nginx版本,也可以在CentOS中使用命令curl-Ihttp://192.168.80.10显示响应报文首部信息。curl-Ihttp://1......
  • Nginx重写功能(rewrite与location)
    一、常用的Nginx正则表达式字符涵义以及示例^匹配输入字符串的起始位置$匹配输入字符串的结束位置*匹配前面的字符零次或多次;如“ol*”能匹配“o”及“o......
  • Nginx 优化与防盗链
    一、隐藏版本号1、隐藏版本号的操作步骤可以使用Fiddler工具抓取数据包,查看Nginx版本,也可以在CentOS中使用命令 curl-Ihttp://192.168.229.90 显示响应报文首......
  • Nginx网站服务配置
    一、NGINX概述1.1nginx简介Nginx("enginex")是一个开源、高性能、高可靠的HTTP和反向代理服务器。Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站......
  • nginx使用
    nginx目录如图:logs可以记录nginx中的报错信息。html存放打包好的项目资源。conf中的nginx.config可以设置访问端口号和代理地址。nginx使用下载nginx......
  • Nginx负载均衡和动静分离
    一、Nginx负载均衡和动静分离1、Nginx实现负载均衡是通过反向代理实现反向代理(ReverseProxy)是指以代理服务器(例:Nginx)来接受internet上的连接请求,然后将请求转发给......
  • (转)Nginx:04---Nginx的命令行控制
    原文:https://blog.csdn.net/qq_41453285/article/details/106295274在默认的情况下:Nginx安装在/usr/local/nginx/下可执行的Nginx文件为/usr/local/nginx//sbin/nginx默认......
  • nginx高并发优化之缓存配置
    一、配置http{proxy_cache_path/app/cache/levels=1:2keys_zone=proxy_cache:10mmax_size=10ginactive=60muse_temp_path=off;upstreambackend{server127......