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. ...
随机推荐
- Java8新特性。
常用函数接口: 函数式接口: 函数式接口在Java中是指:有且仅有一个抽象方法的接口(可以含其他方法). 而Java中的函数式编程的体现就是Lambda. @FunctionalInterface 注 ...
- 【漏洞复现】Apache Solr via Velocity template远程代码执行
0x01 概述 Solr简介 Apache Solr 是一个开源的企业级搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache Solr ...
- word 转pdf 再转图片--用在轻社群发文章
#! /usr/bin/env python # -*- coding: utf-8 -*- import fitz import glob import os from win32com.clien ...
- Httpd服务进阶知识-基于Apache Modele的LAMP架构之PhpMyAdmin案例
Httpd服务进阶知识-基于Apache Modele的LAMP架构之PhpMyAdmin案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见LAMP应用 PhpMyAdm ...
- Httpd服务入门知识-Httpd服务常见配置案例之配置持久连接
Httpd服务入门知识-Httpd服务常见配置案例之配置持久连接 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看默认的持久连接时间 [root@node101.yinzhe ...
- 调试用Chrome浏览器
今天写HTML页面调试时出了问题:一个页面在本地的工作空间文件夹内可以打得开,在HBuilder里用Edge打不开. 我还以为是工作空间路径出问题了,重建了好几次空间和项目.. 询问了小页,他建议以后 ...
- RIG exploit kit:恶意活动分析报告——像大多数exploit kit一样,RIG会用被黑的网站和恶意广告进行流量分发
RIG exploit kit:恶意活动分析报告 from:https://www.freebuf.com/articles/web/110835.html 在过去的几周里,我们曾撰文讨论过Neutr ...
- 文件夹备份tar脚本
#! /bin/sh SOURCEDIR=/data/OA DESTDIR=/data/OAbackup TARDIR=/data/gz #拷贝源文件夹至目标文件夹 cp -r $SOURCEDIR ...
- PHP获取一年有多少周和每周开始和结束日期
/*PHP获取当前日期是第几周和本周开始日期和本周结束日期*/ //$now = '2018-11-13';周二 public function getNowTimeInfo($now) { $str ...
- [React] Fetch Data with React Suspense
Let's get started with the simplest version of data fetching with React Suspense. It may feel a litt ...