Nginx之Rewrite规则
IF语句:
http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_rewrite_module.html#if
首先申明nginx只有if语句做判断适应,没有else语句
if语句的常用形式如下:
- if(condition){
- ... ;
- }
默认值: —
应用位置: server、location
计算指定的condition的值。如果为真,执行定义在大括号中的指令,并将if指令中的配置指定给请求。if指令会从上一层配置中继承配置。
条件可以是下列任意一种:
- 变量名;如果变量值为空或者是以"0"开始的字符串,则条件为假;
- 使用 = 和 != 运算符比较变量和字符串;
- 使用 ~(大小写敏感)和 ~*(大小写不敏感)运算符匹配变量和正则表达式。正则表达式可以包含匹配组,匹配结果后续可以使用变量$..$9引用。如果正则表达式中包含字符'}'或者';',整个表达式应该被包含在单引号或双引号的引用中。
- 使用 -f 和 !-f 运算符检查文件是否存在;
- 使用 -d 和 !-d 运算符检查目录是否存在;
- 使用 -e 和 !-e 运算符检查文件、目录或符号链接是否存在;
- 使用 -x 和 !-x 运算符检查可执行文件;
rewrite语法:
指令语法:rewrite regex replacement[flag];
默认值:none
应用位置:server、location、if
rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记
简单的小例子:
- if ($request_uri ~* "tobd") {
rewrite ^/(.*) http://www.baidu.com/ permanent; # 如果匹配成功后跳转到百度,执行永久301跳转
}
常用正则表达式:
字符 | 描述 |
\ | 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用 |
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或者多次 |
+ | 匹配前面字符串一次或者多次 |
? | 匹配前面字符串的零次或者一次 |
. | 匹配除“\n”之外的所有单个字符 |
(pattern) | 匹配括号内的pattern |
rewrite 最后一项flag参数:
标记符号 | 说明 |
last | 本条规则匹配完成后继续向下匹配新的location URI规则 |
break | 本条规则匹配完成后终止,不在匹配任何规则 |
redirect | 返回302临时重定向 |
permanent | 返回301永久重定向 |
1、基础知识点
(1)Rewirte规则也称为 规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。
(2)对收缩引擎优化(SEO),利于收索引擎抓取网站页面。
(3)隐藏网站URL真实地址。
(4)网站变更升级,可以基于Rewrite临时重定向到其他页面。
(5)有利于服务器实现伪静态。
2、Rewrite结尾表示符
(1)last:相当于apache里的(L)标记,表示完成rewrite匹配。(浏览器地址栏URL地址不变)
(2)break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。(浏览器地址栏URL地址不变)
(3)redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址。
(4)permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
3、Rewrite规则常用表达式
(1) . 匹配任何单字符;
(2)? 匹配0到1个字符;只匹配一次;
(3)* 匹配0到多个字符;
(4)+ 匹配1到多个字符;
(5)[0-9] 匹配字符串0-9
(6)[^0-9] 不匹配字符串0-9
(7)^ 字符串开始标志
(8)$ 字符串结束标志
(9)\n 转义换行标志
4、Nginx Rewrite变量常用于匹配HTTP请求头信息、浏览器主机名、URL等。
5、Rewrite配置在nginx的location块中的配置
(1)将dks.net跳转至www.dks.net
- if($host='dks.net') {
- rewrite ^/(.*)$ http://www.dks.net/$1 permanent;
- }
# $host内置nginx变量,匹配用户访问的域名
# $1表示引用第一个括号的内容,是用户输入的内容;如果不使用$1引用,则只会匹配根
(2)将访问www.dks.net/跳转至www.test.com/new.index.html
- rewrite ^/$ http://www.test.com/new.index.html permanent;
(3)访问 /dks/test01/跳转至/newindex.html,浏览器地址不变
- rewrite ^/dks/test01/$ /newindex.html last;
(4)多域名跳转 www.dks.net
- if($host!='www.dks.net') {
- rewrite ^/(.*)$ http://www.dks.net/$1 permanert;
- }
(5)访问文件和目录不存在跳转至index.php
!-f 和 -f 判断文件
!-d 和 -d 判断目录
!-e 和 -e 判断文件和目录
!-x 和 -x 判断文件是否可执行
- if(!-e $request filename) {
- rewrite ^/(.*) /index.php last;
- }
(6)目录对换 /xxx/123456——> /xxx?id=123456
\d+ 代表匹配数字,相当于[0-9]
- rewrite ^/(.+)/(\d+) /$1?id=$2 last;
(7)判断浏览器User Agent跳转
- if($http_user_agent ~MSIE) {
- rewrite ^(.*)$/ie/$1 break;
- }
(8)禁止访问以.sh | .flv | .mps为文件后缀的文件
- location ~.*\.(sh|flv|mp3)$ {
- return 403;
- }
(9)将移动用户访问跳动至移动端。
- if($http_user_agent ~* "(Android)|(iphone)|(Mobile)|(WAP)|(UCWEB)") {
- rewrite ^/$ http://m.dks.net/ permanent;
- }
(10)匹配URL访问字符串跳转
- if($args ~* tid=13) {
- return 404;
- }
(11)访问/10690/dks/123 跳转至/index.php?tid/10690/items=123
- rewrite ^/([0-9]+)/dks/(.+)$ /index.php?tid/$1/items=$2 last;
6、多rewrite规则跳转
- rewrite ^/dks/(.*)/$ /newindex.html permanent; #可以跳转
- rewrite ^/newindex.html$ /dks/test01/index.html permanent;
- rewrite ^/dks/(.*)/$ /newindex.html break; #break 终止跳转,执行下一条rewrite规则
- rewrite ^/newindex.html$ /dks/test01/index.html permanent;
- rewrite ^/dks/(.*)/$ /newindex.html last; #last 跳转,但下面那条rewrite规则匹配不上,因为last使地址栏url地址不变,所以下面的那条rewrite规则匹配不上;
- rewrite ^/newindex.html$ /dks/test01/index.html permanent; #此条规则匹配不上上边的url地址
Nginx之Rewrite规则的更多相关文章
- Nginx的Rewrite规则与实例
通过Rewrite规则可以实现规范的URL.根据变量来做URL转向及选择配置,用好Rewrite有时起到事半功倍的效果. 语法 Nginx的Rewrite相比Apache的要好理解很多,主要使用指令有 ...
- Apache和Nginx的Rewrite规则对比
一.Apache的rewrite 1.Rewrite规则简介: Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.h ...
- Nginx 设置rewrite规则是遇到的一个{}大括号引发的报错问题
一个群友提到: 用nginx image_filter模块裁图,用!拼宽高能够实现,现在想用参数传宽高总是报错,配置如下: location ~ ^/images/.* { if ( $q ...
- Nginx 之 Rewrite 规则
write 规则介绍 Rewite 规则作用 Rewrite规则可以实现对url的重写,以及重定向 作用场景: URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等 SEO优化 维护:后台 ...
- nginx 带? rewrite 规则
由于需要重定向 url ,nginx需要rewrite .参考文献 http://huangqiqing123.iteye.com/blog/2083434 需求:将http://10.106.1.3 ...
- nginx 重定向 rewrite 规则
1.rewrite配置 server { listen 80 default_server; server_name jeson.t.imooc.io; access_log /var/log/ngi ...
- 修改Nginx 伪静态Rewrite规则 安装Chevereto
Chevereto 是目前最为强大的 PHP 图床系统,通过它可部署多用户公开或私有的图片存储服务,现在 Chevereto 出了免费的版本,小伙伴可以围观一下. https://github.com ...
- nginx的rewrite规则
301跳转: server { listen 80; server_name www.xiaofan.com; return 301 https://$server_name$request_uri; ...
- Nginx配置location总结及rewrite规则写法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #323333 } p. ...
随机推荐
- 一步一步实现kbmmw的httpsys使用https功能
kbmmw的httpsys的功能已经实现了好长时间,但是现在各个平台都要求使用https来提供服务. 今天一步一步来说一下如何使用kbmmw 的httpsys功能支持https. 首先为了获得证书,我 ...
- 大数据集群环境搭建之一 hadoop-ha高可用安装
1.如果你使用root用户进行安装. vi /etc/profile 即可 系统变量 2.如果你使用普通用户进行安装. vi ~/.bashrc 用户变量 export HADOOP_HOME=/ex ...
- 自定义View(四),onMeasure
转自:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--on ...
- Plan B
王兴曾经说过: 2019 年是过去 10 年中最差的一年,也是未来 10 年中最好的一年. 之前我希望王兴预判错了,但现在我发现这位掌控着生活消费类数据的大佬应该不是扯淡. 今年的内部和外部环境真的很 ...
- Tomcat内存溢出解决方法
Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在 ...
- jenkiins 配置邮件发送(四)
一.默认邮件配置的方法 Jenkins默认的插件只能发送执行失败的job 系统管理-->系统设置-->邮件通知 需要注意的是系统管理员邮箱地址必须要邮箱通知的邮箱一致,否则不会发送成功 在 ...
- Redis Cluster数据分片机制
复制粘贴自: https://www.e-learn.cn/content/redis/2344485, 点击链接访问原文 仅供个人学习参考之用, 如有侵权, 请联系删除! 高级开发不得不懂的Redi ...
- springboot集成mail实现邮件服务
1,新建mailconfig类,对邮件服务固定配置进行实体封装: import java.util.Properties; import org.springframework.beans.facto ...
- 一个使用vue和echarts结合的demo
前端框架真的很神奇,接触了几天vue.js,用它结合echarts做一个数据分析图,效果如下: 附上源码地址:https://github.com/qingguoYan/orderVue.git
- 异步链式编程—promise沉思录
一.promise的组成 1.task:promise要完成的任务: 2.result:处理完的数据: 3.status:状态: 4.fulfill.reject(对应catch) 5.Resolve ...