Nginx Rewrite

Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则

表达式是基于 Perl 语言。通常而言,几乎所有的 WEB 服务器均可以支持 URL 重写。Rewrite

URL 规则重写的用途:

对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网站页面;

隐藏网站 URL 真实地址,浏览器显示更加美观;

网站变更升级,可以基于 Rewrite 临时重定向到其他页面。

Nginx Rewrite 规则使用中有三个概念需要理解,分别是:Rewrite 结尾标识符、Rewrite

规则常用表达式、Nginx Rewrite 变量,如下为三个概念的详解:

(1) Nginx Rewrite 结尾标识符,用于 Rewrite 规则末尾,表示规则的执行属性。

last  :相当于 Apache 里的(L)标记,表示完成 rewrite 匹配;

break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。

redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址。

permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址。

其中 last 和 break 用来实现 URL 重写时,浏览器地址栏 URL 地址不变。

2) Nginx Rewrite 规则常用表达式,主要用于匹配参数、字符串及过滤设置。

.

匹配任何单字符;

[word]

匹配字符串:word;

[^word]

不匹配字符串:word;

jfedu|jfteach

可选择的字符串:jfedu|jfteach;

?

匹配 0 到 1 个字符;

*

匹配 0 到多个字符;

+

匹配 1 到多个字符;

^

字符串开始标志;

$

字符串结束标志;

\n

转义符标志。

(3)

Nginx Rewrite 变量,常用于匹配 HTTP 请求头信息、浏览器主机名、URL 等。

HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST,

HTTP_ACCEPT;

connection & request: REMOTE_ADDR, QUERY_STRING;

server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL;

system stuff: TIME_YEAR, TIME_MON, TIME_DAY。

详解如下:

HTTP_USER_AGENT 用户使用的代理,例如浏览器;

HTTP_REFERER 告知服务器,从哪个页面来访问的;

HTTP_COOKIE 客户端缓存,主要用于存储用户名和密码等信息;

HTTP_HOST 匹配服务器 ServerName 域名;

HTTP_ACCEPT 客户端的浏览器支持的 MIME 类型;

REMOTE_ADDR 客户端的 IP 地址

QUERY_STRING URL 中访问的字符串;

DOCUMENT_ROOT 服务器发布目录;

SERVER_PORT 服务器端口;

SERVER_PROTOCOL 服务器端协议;

TIME_YEAR 年;

TIME_MON

月;

TIME_DAY

日;

(4)

Nginx  Rewrite  以下配置均配置在 nginx.conf 或者 vhosts.conf  中,企业中常用的

Nginx Rewrite 案例如下:

1. 将 baidu.com 跳转至 ww.baidu.com。

if ($host = 'jfedu.net' ) {

rewrite ^/(.*)$ ww.baidu.com permanent;

}

  1. 访问 www.baidu.com跳转 new_index.html。

rewrite ^/$ http://www.baidu.com/new_index.html permanent;

   2.访问/baidu/test01/跳转至/newindex.html,浏览器地址不变。

rewrite ^/test01/$  http://www.baidu/newindex.htmil last;

  3.多域名跳转到 www.baidu.com。

if ($host != ‘www.baidu.com’ ) {

rewrite ^/(.*)$ http://www.baidu.com/$1 permanent;

}

  4. 访问文件和目录不存在跳转至 index.php。

if ( !-e $request_filename )

{

rewrite ^/(.*)$ /index.php last;

}

  

  5.目录对换 /xxxx/123456  ====>  /xxxx?id=123456。

rewrite ^/(.+)/(\d+) /$1?id=$2 last;

  6.判断浏览器 User Agent 跳转。

if( $http_user_agent ~ MSIE)

{

rewrite ^(.*)$ /ie/$1 break;

}

  7.禁止访问以.sh,.flv,.mp3 为文件后缀名的文件。

location ~ .*\.(sh|flv|mp3)$

{

return 403;

}

    9.将移动用户访问跳转至移动端。

if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" )

{

rewrite ^/$ http://m.baidu.net/ permanent;

}

  10. 匹配 URL 访问字符串跳转。

if ($args ~* tid=13) { return 404;

}

  11.访问/10690/baidu/123 跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+ 表示多个,(.+)表示任何多个字符。

rewrite ^/([0-9]+)/baidu/(.+)$ /index.php?tid/$1/items=$2 last;

rewirte 规则的更多相关文章

  1. Nginx之Rewrite规则

    IF语句: http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_rewrite_module.html#if 首先申明nginx只有i ...

  2. nginx 实现Web应用程序的负载均衡

    文章转载自 博客园, 原文地址 http://www.cnblogs.com/ivanyb/archive/2011/11/16/2250710.html 看到园子中的大牛代震军写的一篇玩玩负载均衡- ...

  3. apache伪静态配置(URL重写)

    1.打开apache配置文件 httpd.conf .2.开启rewrite模块,去掉注释# #LoadModule rewrite_module modules/mod_rewrite 3.让apa ...

  4. 负载均衡---在window与linux下配置nginx

    最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,sq ...

  5. centos7-httpd服务器

    Apache WEB服务器入门简介: Apache HTTP Server是Apache软件基金会的一个开源的网页服务器,可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是目 ...

  6. centos7 中源码安装nginx

    使用nginx有一段时间了,还是有很多东西不懂的,在这里做一下自己学习过程中的一些整理,能使自己得到提升. 1.环境:centos7 1511  最小化安装 2.下载nginx,可以在系统中下载,也可 ...

  7. 【转】玩玩负载均衡---在window与linux下配置nginx

    最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,sq ...

  8. Apache调优(二)

    Apache调优(一) (1).Apache运行模式说明 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式:Prefork(进程模式).Wo ...

  9. 玩玩负载均衡---在window与linux下配置nginx

      最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx, ...

随机推荐

  1. Jest 单元测试入门

    今天,我们要讲的是 Jest 单元测试的入门知识. 为何要进行单元测试? 在学习 Jest 之前,我们需要回答一个问题:为何要进行单元测试?编写单元测试可以给你带来很多好处: 将测试自动化,无需每次都 ...

  2. hdu1754线段树的单点更新区间查询

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. bzoj1806 [Ioi2007]Miners矿工配餐

    [bzoj1806][Ioi2007]Miners 矿工配餐 2014年7月10日1,7870 Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦,所以矿工们需要良好饮食.每 ...

  4. Zabbix(一) : 简介以及Server端安装

    一.什么是Zabbix? zabbix由AlexeiVladishev首先开发,目前在维护的是Zabbix SIA.ZABBIX是一个企业级的开源分布式监控解决方案. zabbix为监控网络和服务器的 ...

  5. Python自学笔记-Django分页器小实例

    from django.core.paginator import Paginator iter = 'abcdefhijklmnopqw' paginator = Paginator(iter,4) ...

  6. sublime text注册码(秘钥)

    —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...

  7. Jquery 使用Ajax获取后台返回的Json数据后,页面处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. [解读REST] 5.Web的需求 & 推导REST

    衔接上文[解读REST] 4.基于网络应用的架构风格,上文总结了一些适用于基于网络应用的架构风格,以及其评估结果.在前文的基础上,本文介绍一下Web架构的需求,以及在对Web的关键协议进行设计和改进的 ...

  9. js系列教程2-对象、构造函数、对象属性全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  10. CVPixelBuffer的创建 数据填充 以及数据读取

    CVPixelBuffer的创建数据填充以及数据读取 CVPixelBuffer 在音视频编解码以及图像处理过程中应用广泛,有时需要读取内部数据,很少的时候需要自行创建并填充数据,下面简单叙述. 创建 ...