nginx_rewrite
介绍:
和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。
rewrite <regex> <replacement> [flag]; 关键字 正则 替代内容 flag标记 关键字:其中关键字error_log不能改变 正则:perl兼容正则表达式语句进行规则匹配 替代内容:将正则匹配的内容替换成replacement flag标记:rewrite支持的flag标记 flag标记说明: last #本条规则匹配完成后,继续向下匹配新的location URI规则 break #本条规则匹配完成即终止,不再匹配后面的任何规则 redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址 permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
在以上的flag标记中,last和break用来实现URL重写,浏览器地址栏的URL地址不变,但在服务器端访问的程序及路径发生了变化。
redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址。
last和break标记的实现功能类似,但二者之间有细微的差别,使用alias指令时必须用last标记,使用proxy pass指令时要使用break标记。
last标记在本条 rewrite规则执行完毕后,会对其所在的server{…}标签重新发起请求,而break标记则会在本条规则匹配完成后,终止匹配,不再匹配后面的规则
rewrite参数的标签段位置:
server,location,if
rege常用正则表达式说明:
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分的内容,重定向到repla部分,结尾是flag标记,下面是一个简单的URL rewrite跳转的例子:
rewrite ^/(.*) http://www/dmtest1.com/$1 permanent;
在上述指令中,rewrite为固定关键字,表示开启一天rewrite匹配规则,regex部分是^/(.*),这是一个正则表达式,表示匹配所有,匹配成功后
跳转到http://www.dmtest1.com/$1。这里的$1是前面(rege)部分括号里面的内容,结尾的permanent;是永久301重定向标记,
即跳转到后面的http://www.dmtest1.com/$1地址上。
\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。例如,"\n"匹配一个换行符,序列"\\"和"$"则匹配"$"
^ 匹配输入字符串的起始位置,如果设置了RegExp对象的Multiline属性,^也匹配"\n"或"r"之后的位置
$ 匹配输入字符串的结束位置,如果设置了RegExp对象的Multiline属性,$也匹配"\n"或"\r"之前的位置
* 匹配前面的字符零次或多次,例如,ol*能匹配"o"及"olll",*等价于{0,}
+ 匹配前面的字符一次或多次,例如,"ol+"能匹配"ol"及"oll",但不能匹配"o",.+等价于{1,}
? 匹配前面的字符零次或一次,例如,"do(es)?"可以匹配"do"或"does"中的"do",.?等价于{0,1}
当该字符紧跟在任何一个其他限制符(*,+?,{n},{n},{n,m})的后面时,匹配模式是非贪婪模式的,非贪婪模式会尽可能少地匹配所搜索的字符串,
而默认的贪婪模式则会尽可能多地匹配所搜索的字符串,例如,对于字符串"oooo","o+?"将匹配单个"o",而"o+"将匹配所有"o"
. 匹配除"\n"之外的任何单个字符,要匹配包括"\n"在内的任何字符,请使用像"[.\n]"这样的模式
(pattern) 匹配括号内的pattern,并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容。要匹配圆括号字符,请使用"\("或"\)"
例子:
server { listen 80; server_name abc.com; rewrite ^/(.*) http://www.abc.com/$1 permanent; } server { listen 80; server_name www.abc.com; location / { root /data/www/www; index index.html index.htm; } error_log logs/error_www.abc.com.log error; access_log logs/access_www.abc.com.log main; } 或者 server { listen 80; server_name abc.com www.abc.com; if ( $host != 'www.abc.com' ) { rewrite ^/(.*) http://www.abc.com/$1 permanent; } location / { root /data/www/www; index index.html index.htm; } error_log logs/error_www.abc.com.log error; access_log logs/access_www.abc.com.log main; }
#打开浏览器访问abc.com
#页面打开后,URL地址栏的abc.com变成了www.abc.com说明URL重写成功。
下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
下面是可以用作判断的全局变量:
参数 | 说明 |
$args | 这个变量等于请求行中的参数。 |
$content_length | 请求头中的Content-length字段。 |
$content_type | 请求头中的Content-Type字段。 |
$document_root | 当前请求在root指令中指定的值。 |
$host | 请求主机头字段,否则为服务器名称。 |
$http_user_agent | 客户端agent信息 |
$http_cookie | 客户端cookie信息 |
$limit_rate | 这个变量可以限制连接速率。 |
$request_body_file | 客户端请求主体信息的临时文件名。 |
$request_method | 客户端请求的动作,通常为GET或POST。 |
$remote_addr | 客户端的IP地址。 |
$remote_port | 客户端的端口。 |
$remote_user | 已经经过Auth Basic Module验证的用户名。 |
$request_filename | 当前请求的文件路径,由root或alias指令与URI请求生成。 |
$query_string | 与$args相同。 |
$scheme | HTTP方法(如http,https)。 |
$server_protocol | 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。 |
$server_addr | 服务器地址,在完成一次系统调用后可以确定这个值。 |
$server_name | 服务器名称。 |
$server_port | 请求到达服务器的端口号。 |
$request_uri | 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。 |
$uri | 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。 |
$document_uri | 与$uri相同。 |
nginx的rewrite功能在企业里的应用非常广泛:
1、可以调整用户浏览的URL,使其看起来更规范,合乎开发及产品人员的需求。
2、为了让搜索引擎收藏网站内容,并让用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
3、网站换新域名后,让旧域名的访问跳转到新域名上,例如让京东的360buy换成jd.com.
4、根据特殊变量、目录客户端的信息进行URL跳转等。
实现不同域名的跳转
server {
listen 80;
server_name blog.dmtest.com;
location / {
root html/blog;
index index.html index.htm;
}
if ( $http_host ~* "^(.*)\.dmtest\.com$) {
set $domain $1;
rewrite ^(.*) http://www.dmtest.com/$domain/dm.html break;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx_rewrite的更多相关文章
- 2.nginx_rewrite模块
rewrite syntax: rewrite regex replacement [flag] Default: — Context: server, location, if 如果正则表达式(re ...
- nginx_rewrite规则介绍
rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向.rewrite只能放在server{},location{},if{}中,并且只能 ...
- add web server(nginx+apache)
#!/bin/bash # # Web Server Install Script # Last Updated 2012.09.24 # ##### modify by WanJie 2012.09 ...
- add web server(nginx)
#!/bin/bash # # Web Server Install Script # Last Updated 2012.09.24 # ##### modify by WanJie 2012.09 ...
- 搭建Drupal-8.5.3
环境说明 系统版本 CentOS 6.9 x86_64 软件版本 yum安装nginx 1.10.2 yum安装php 7.2.6(当前的最新版本) yum安装mysql 5.5.60 d ...
- Kubernetes K8S之Ingress详解与示例
K8S之Ingress概述与说明,并详解Ingress常用示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
随机推荐
- UltraSoft - Alpha - 发布声明
DDL_Killer Alpha版本发布声明 1. Alpha 阶段功能描述与版本实现 功能描述 设计原型 Alpha实现 登陆界面 注册界面 首页 日历视图 事项详情页 新建事项 列表视图 课程视图 ...
- 【二食堂】Alpha - Scrum Meeting 6
Scrum Meeting 6 例会时间:4.16 11:40 - 12:10 进度情况 组员 昨日进度 今日任务 李健 1. 文本区域进度40%,UI需要进行调整issue 1. 继续文本区域的开发 ...
- mongodb的聚合操作
在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用 聚合框架(aggregation) 来完成.在mongodb ...
- 电脑cmd命令快速查看连接过的WIFI密码信息
只是突然发现,好奇心作怪,试了一下,妈妈再也不用担心我忘记家里的wifi密码了 1.直接打开"运行"(win键+R) 2.输入CMD 确定 3.输入下面cmd命令.鼠标粘贴 for ...
- stop: Job failed while stopping start: Job is already running: networking eth0 not configured
再给ubuntu系统重启网络服务的时候出现失败,"stop: Job failed while stopping start: Job is already running: network ...
- POJ 1274 The Perfect Stall(二分图最大匹配)
题意: N头牛M个牛棚,每只牛都有它自己指定的若干个它愿意呆的牛棚. 每个牛棚最多呆一头牛. 问最多可以满足多少头牛的愿望. 思路: 裸二分图最大匹配. 代码: int n,m; vector< ...
- Python3使用Print输出彩色字体
一.介绍 在一些开发程序中,有些输出消息需要突出显示,我们可以尝试着给他们换上更靓丽的颜色来突出显示. 二.实现过程 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. ...
- Docker 搭建 Jenkins 持续集成自动化构建环境
1.Docker镜像拉取 Jenkins 环境命令 docker pull jenkins/jenkins:lts 查看下拉取的镜像 docker images 2.通过容器编排方式构建 Jenkin ...
- Dubbo框架协议总结
Dubbo支持的各种协议及相关特性及应用场景,均可在官网文档中找到. 支持的协议有dubbo.rmi.hession.http.webservice.thrift.memcached.redis.re ...
- diff 命令,防止遗忘
常规输出: diff 1.file 2.file 并排格式输出: diff 1.file 2.file -y -W 50 显示说明 "|"表示前后2个文件内容有不同 "& ...