rewirte 规则
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;
}
- 访问 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 规则的更多相关文章
- Nginx之Rewrite规则
IF语句: http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_rewrite_module.html#if 首先申明nginx只有i ...
- nginx 实现Web应用程序的负载均衡
文章转载自 博客园, 原文地址 http://www.cnblogs.com/ivanyb/archive/2011/11/16/2250710.html 看到园子中的大牛代震军写的一篇玩玩负载均衡- ...
- apache伪静态配置(URL重写)
1.打开apache配置文件 httpd.conf .2.开启rewrite模块,去掉注释# #LoadModule rewrite_module modules/mod_rewrite 3.让apa ...
- 负载均衡---在window与linux下配置nginx
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,sq ...
- centos7-httpd服务器
Apache WEB服务器入门简介: Apache HTTP Server是Apache软件基金会的一个开源的网页服务器,可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是目 ...
- centos7 中源码安装nginx
使用nginx有一段时间了,还是有很多东西不懂的,在这里做一下自己学习过程中的一些整理,能使自己得到提升. 1.环境:centos7 1511 最小化安装 2.下载nginx,可以在系统中下载,也可 ...
- 【转】玩玩负载均衡---在window与linux下配置nginx
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,sq ...
- Apache调优(二)
Apache调优(一) (1).Apache运行模式说明 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式:Prefork(进程模式).Wo ...
- 玩玩负载均衡---在window与linux下配置nginx
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx, ...
随机推荐
- Javascript写的一个可拖拽排序的列表
自己常试写了一个可拖拽进行自定义排序的列表,可能写的不太好,欢迎提供意见. 我的思路是将列表中的所有项都放进一个包裹层,将该包裹层设为相对定位,每当点击一个项时,将该项脱离文档并克隆一份重新添加到文档 ...
- Dice (II) (DP)唉,当时没做出来
Dice (II) Time Limit: 3000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu [Submit] [ ...
- C# 7 局部函数剖析
局部函数是C# 7中的一个新功能,允许在一个函数中定义另一个函数. 何时使用局部函数? 局部函数的主要功能与匿名方法非常相似:在某些情况下,创建一个命名函数在读者的认知负担方面代价太大.有时,函数本身 ...
- CLR via 随书笔记
CTS(common type system) 通用类型系统规定,一个类型可以包含零个或者多个成员,如下: 字段(Field): 作为对象状态一部分的数据变量.字段根据名称和类型来区分 方法( ...
- 合并Spark社区代码的正确姿势
原创文章,转载请保留出处 最近刚刚忙完Spark 2.2.0的性能测试及Bug修复,社区又要发布2.1.2了,国庆期间刚好有空,过了一遍2.1.2的相关JIRA,发现有不少重要修复2.2.0也能用上, ...
- asp.net或者MVC定时自动执行某操作
using System; using System.IO; using System.Runtime.CompilerServices; using System.Text; namespace S ...
- python装饰器 & flask 通过装饰器 实现 单点登录验证
首先介绍装饰器,以下是一段标注了特殊输出的代码.用于帮助理解装饰器的调用过程. import time def Decorator_one(arg1): info = "\033[1;31; ...
- CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景
全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css选择器全解 css操作语法全解 CSS样式设置语法全解: 样式优先级 1. !important标记的样式 > 内联样式(sty ...
- DOS命令(系统错误5,拒绝访问)的解决方法
在用DOS命令启动MySQL服务时,出现(系统错误5,拒绝访问)的错误提示,这是由于我们操作的权限不足造成的,需要以管理员身份启动,解决问题方法如下: 1."Windows+S"- ...
- 【转载】CSS direction属性简介与实际应用
文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/wordpress/ 原文链接:http://www.zhangxinxu.com/wordpress/?p=5 ...