Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26141641
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-03-07 22:35:47

整理相关nginx实现rewrite功能专题

Nginx的Rewrite
经过网上查阅和测试,发现Nginx的Rewrite规则和Apache的Rewite规则差别不是很大,几乎可以直接使用。比如在Apache中这样写规则
rewrite ^/([0-9]{5}).html$ /viewthread.php?tid=$1 last;
而在Nginx中写成这样写是无法启动的,解决的办法是加上两个双引号:
rewrite “^/([0-9]{5}).html$” /viewthread.php?tid=$1 last;
同时将RewriteRule为Rewrite,基本就实现了Nginx的Rewrite规则到Apache的Rewite规则的转换。

Rewrite的Flags
last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301

官方文档请点击,另外如果对于302,301这些状态有疑问的,可以参考《》:
如果需要对Nginx配置防盗链的话,可以参考《》:

正则表达式匹配,其中:

   1. * ~ 为区分大小写匹配
   2. * ~* 为不区分大小写匹配
   3. * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

文件及目录匹配,其中:

   1. * -f和!-f用来判断是否存在文件
   2. * -d和!-d用来判断是否存在目录
   3. * -e和!-e用来判断是否存在文件或目录
   4. * -x和!-x用来判断文件是否可执行

flag标记有:

   1. * last 相当于Apache里的[L]标记,表示完成rewrite
   2. * break 终止匹配, 不再匹配后面的规则
   3. * redirect 返回302临时重定向 地址栏会显示跳转后的地址
   4. * permanent 返回301永久重定向 地址栏会显示跳转后的地址


补充说明:

Url Rewrite 是什么?


UrlRewrite 是 将静态页面转换为动态页面的一种技术. 例如.您网站页面是 使用UrlRewrite转换后 可以 以 来访问. UrlRewrite的用处: 满足搜索引擎的要求,google可以抓取动态页面,但是google对动态页面的评分一般低于静态页面.

原理:URL Rewrite技术。该技术的核心方程是在服务器端,主要通过服务器的重写技术,一种基于正则表达式的重定向技术。 原理如:index.asp?id=124这个地址,服务器事先定义,/可以替换,重写为?id=则,这个地址就变成index.asp/124。这个定 义的意思是说,当服务器接受到一个http请求,请求访问其上的index.asp/124这个文件时,先通过Rewrite 对该地址进行重写,然后载入重写后的地址,进行解析。这样当你访问http:///index.asp/123时,并没有直接 到达这个文件,而是这个地址,在服务器那里被换掉了,而这个换掉的过程,对客户端而言是隐蔽的,不可知的。

    这里说的,只是原理,简单的替换,事实上,URL Rewrite还可以做许多更复杂的代换。如喜悦国际村的,由showthreads.php?postid=12345转换为12345.html。具体可以参照apache手册中的说明。



为什么要应用URL Rewrite技术

    从原理上可知,这种技术并不能实际提高访问速度,减少负载,与生成静态页面有着本质上的区别,但为什么有那么多网站热衷于此呢?说到这里,我们不得不提到 搜索引擎。搜索引擎后台的蜘蛛引擎可以动态抓取互联网上的页面,经分析后存入数据库。但动态页面,一般却是不被蜘蛛引擎考虑的,只有很少部分,可能会被自 动收录进去。而蜘蛛引擎识别静态页面和动态页面是从一点基本点着手,即静态页面一般不包含参数。即?id=...&post=..之类的即看关键字? &如果遇到了就知道这是一段动态的请求在nginx做一次正则把请求丢到后端的动态服务器处理)。而动态页面多有这个东西。所以蜘蛛引擎在收录过程中,?后的部分基本是不考虑的。这样造成的结果就是showthreads.php?id=123456由于? 后部分被忽略,就变成了showthreads.php。当然这个页面并不具备任何实际内容的。即,URL Rewrite技术多为搜索引擎而来。

    具体的URL Rewrite方法,参数,可参阅apache手册中URL Rewrite部分。如果是windows的操作系统,可能要装个插件才能使用(需要安装 ISAPI_Rewrite 插件)。


阅读(835) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~