全部博文(2065)
分类: 系统运维
2010-03-07 22:35:47
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还可以做许多更复杂的代换。如喜悦国际村的,由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 插件)。