zoukankan      html  css  js  c++  java
  • ISAPI_Rewrite应用技巧与方法

    ISAPI Rewrite确实是个好东西,我们不仅用它可以实现简单的URL重写来实现搜索引擎友好(SEF)的URL形式,还可以利用 ISAPI Rewrite 帮您轻松实现服务器端图片负载平衡以及图片防盗链等Web功能应用。

    1、IIS6.0使用ISAPI_Rewrite进行图片负载均衡

    服务器环境:Windows Server 2003 + IIS 6.0 + ISAPI_Rewrite 3.x

    以前网站的图片都放在一个逻辑分区里面。网站访问量的增加,磁盘负载有点压力太大。所以想使用isapi_rewrite对图片进行负载均衡。

    把单数的图片拷贝到e盘的pictrue目录下。把双数的图片拷贝到f盘的pictrue目录下。

    在iis中新建一个站点。建立2个虚拟目录分别指向e盘中的pic目录和f盘中的pic目录。名字分别叫pictrue0,pictrue1。

    Rewirte Rule:

    1. # Helicon ISAPI_Rewrite configuration file
    2. # Version 3.1.0.58
    3.  
    4. RewriteEngine on
    5.  
    6. #double pictrue
    7. RewriteRule pictrue/([0-9]+)_([0-9]+[02468])\.(jpg|gif|png|bmp|jpeg) /pictrue0/$1_$2.$3[NC]
    8.  
    9. #signle pictrue
    10. RewriteRule pictrue/([0-9]+)_([0-9]+[13579])\.(jpg|gif|png|bmp|jpeg) /pictrue1/$1_$2.$3[NC]

    延伸想法:我们换可以利用图片负载平衡的原理,实现文件下载的负载平衡,如果我们结合服务器磁盘阵矩来进行负载,服务器的吞吐量会有明显的提高,有兴趣的童鞋可以试验一下。

    2、利用ISAPI_Rewrite实现图片防盗链

    图片被盗链对站长来说是个不幸的事情,特别被大流量网站盗链之后,给服务器带来不必要的负担,严重的甚至影响到网站的正常运行。对于商业模式的网站,损害自不必多言。

    图片防盗链现在已经有一些解决办法了。基本上都是利用HTTP的 Referer头做条件判断。在Apache下利用mod_rewrite能很好防止图片和其他资源被盗链。下面是Apache下利用mod_rewrite防止Mp3资源被盗链的例子。作适当修改,同样适用于图片及其他资源的防盗链处理:

    1. RewriteEngineon 
    2. RewriteCond %{HTTP_REFERER} !^http://(www.)?sky54\.net/.*$ [NC]
    3. RewriteRule .(mp3|rar)$ http://www\.sky54\.net/archives/001\.html [R=301,L]

    以上方法对静态网页也适用。另还有在动态网页中利用脚本,进行防盗链处理。

    今天主要说的是IIS下利用ISAPI_Rewrite进行图片防盗处理。ISAPI_Rewrite是helicontech开发利用正则表达式进行URl转换的软件,与Apache的mod_rewrite类似,是专用针对微软的IIS开发的,常用来做网址静态化等应用。

    关于ISAPI_Rewrite的安装和使用,这里就不多说了。下面说说如何利用ISAPI_Rewrite进行图片等资源的防盗链处理。

    在httpd.ini中加入以下规则:

    1. [ISAPI_Rewrite]
    2. RewriteCond Host: (.+)
    3. RewriteCond Referer: (?!http://1.*).*
    4. RewriteRule .*.(?:gif|jpg|png|jpeg|bmp) /block.gif [I,O]

    原理:利用HTTP返回的 Referer 信息,如果Referer引用地址不是来自本站的,则用block.gif图片代替。block.gif上可以加上提示或警告信息,从而达到防止图片被盗链。

    3、利用ISAPI_Rewrite 实现网站301永久重定向

    利用ISAPI_Rewrite 实现网站301永久重定向原理
    利用ISAPI_Rewrite 实现网站301永久重定向原理

    301转向(301 Redirect : Permanently Moved),表示内容永久性转移到新的URL,这样搜索引擎就会知道内容已转移,会去抓取新的URL,因此是友好的。我们会在域名解析时,创建一个空的主机名,来方便用户输入网址,而省去了www,这样虽然方便了用户,但是从SEO的角度来说,是违反了URL标准化准则的,因此,我们需要对这些不统一的URL进行301重定向。

    站点域名301重定向

    以下规则能够将sky54.net以301重定向方式转到www.sky54.net,这样对于搜索引擎来说是友好的。

    注意:以下以本站域名301重定向的URL Rewrite Rule中包含了ISAPI_Rewrite 2.x与ISAPI_Rewrite 3.x版本2种规则,在你使用时务必确认自己服务器使用的版本,否则是无法工作的,ISAPI_Rewrite 3.x版本提供了一个ISAPI_Rewrite 2.x规则转换成ISAPI_Rewrite 3.x规则的功能。

    1. # For ISAPI_Rewrite 2.x
    2. RewriteCond Host: ^sky54\.net$
    3. RewriteRule (.*)http\://www\.sky54\.net$1[I,RP]
    4.  
    5. # For ISAPI_Rewrite 3.x
    6. RewriteCond %{HTTP:Host} ^sky54\.net$
    7. RewriteRule (.*)http\://www\.sky54\.net$1[NC,R=301]

    不同域名间的301永久重定向

    当网站改版调整二级域名或更换新域名,旧的域名的流量与权重就白白丢掉不是很可惜?用ISAPI_Rewite此时可以帮你实现域名301永久重定向既可以将旧域名的流量与权重重定向至新域名。

    比如:将sky54.cn域名利用ISAPI_Rewrite进行301永久重定向至www.sky54.net,规则同上,详细的Rewrite Rule如下:

    1. # For ISAPI_Rewrite 2.x
    2. RewriteCond Host: ^sky54\.cn$
    3. RewriteRule (.*)http\://www\.sky54\.net$1[I,RP]
    4.  
    5. # For ISAPI_Rewrite 3.x
    6. RewriteCond %{HTTP:Host} ^sky54\.cn$
    7. RewriteRule (.*)http\://www\.sky54\.net$1[NC,R=301]

    提示:ISAPI_Rewrite 301重定向后,整个域名下的文件访问都将被重定向,而不仅仅是首页而已!

    页面间的301永久转向

    当我们改变了某些页面的地址,但是又不想损失流量,就应该使用301转向,将原来的URL重定向到新的URL上,这样搜索引擎会知道页面地址变更,而不会以为这个页面出错消失了。

    规则如下:

    1. # For ISAPI_Rewrite 2.x
    2. RewriteRule ^/404\.htm$ http://www\.sky54\.net/index.php [I,O,RP,L]
    3.  
    4. # For ISAPI_Rewrite 3.x
    5. RewriteRule ^/404\.html$ http://www\.sky54\.net/index\.php [NC,L,R=301,O]

    我们将根目录下的404.htm使用301转向重定向到了http://www.sky54.net/index.php,当然,我们也可以自己指定任意目的地址,可以是站内的(同样以/pagename的形式)或站点外的(以http://开头的URL形式)。

    注释:这里出现的O表示对URL进行标准化,可能是用来处理Unicode编码的地址(例如包含中文的URL)以及QueryString的内容,这里我没有测试过。而L表示Last Rule,最后一条规则,也就是后面的重写规则对他不起作用,防止被其他匹配的规则再次重写而造成混乱。

    最后说明一下:本文所使用的RewriteRule(重写规则)仅适合ISAPI Rewrite 2.x以及3.x版本,因为标识符(比如[I,RP])在2.0以前版本是不支持的,会在httpd.parse.errors中提示错误。而如果你使用的是ISAPI Rewrite 3.0以后的版本,那么2.x的规则是不兼容的,不过3.0版本提供了一个规则转换器,我们可以直接将2.0的规则导入,它会自动转换成3.0版本的规则。

  • 相关阅读:
    我的访问量咋才3万了
    Khronos发布WebGL标准规范 1.0
    X3Dom V1.2发布
    解决Linux(Fedora Ubuntu)笔记本的待机休眠
    多用户虚拟Web3D环境Deep MatrixIP9 1.04发布
    网络科技公司Web开发团队管理的小结
    XamlReader 动态加载XAML
    Excel Data Reader开源的.NET excel读取库
    .net Sql server 事务的两种用法
    通过使用客户端证书调用 Web 服务进行身份验证{转}
  • 原文地址:https://www.cnblogs.com/lynnlin/p/3033338.html
Copyright © 2011-2022 走看看