• 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:

    # Helicon ISAPI_Rewrite configuration file
    # Version 3.1.0.58 RewriteEngine on
     #double pictrueRewriteRule pictrue/([0-9]+)_([0-9]+[02468])\.(jpg|gif|png|bmp|jpeg) /pictrue0/$1_$2.$3[NC] 
    #signle pictrueRewriteRule 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资源被盗链的例子。作适当修改,同样适用于图片及其他资源的防盗链处理:

    RewriteEngineon RewriteCond %{HTTP_REFERER} !^http://(www.)?sky54\.net/.*$ [NC]
    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中加入以下规则:

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

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

    3、利用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规则的功能。

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

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

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

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

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

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

    页面间的301永久转向

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

    规则如下:

    # For ISAPI_Rewrite 2.x
    RewriteRule ^/404\.htm$ http://www\.sky54\.net/index.php [I,O,RP,L] 
    # For ISAPI_Rewrite 3.x
    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版本的规则。

    相关推荐阅读:看完《ISAPI_Rewrite应用技巧与方法》后,您可以通过阅读《URL重写:RewriteCond指令与RewriteRule 指令格式》进一步了解ISAPI_Rewrite的原理,以及Rewrite Rule指令格式语法解析。

  • 相关阅读:
    Nginx rewrite模块深入浅出详解
    一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS
    nginx: [emerg] getpwnam(“www”) failed错误
    mysql5.7 启动报发生系统错误2
    obv15 实例6:如果K线柱过多,ZIG将发生变动,导致明显的OBV15指标被隐藏!
    obv15 案例4,待日后分析
    稳定
    教你识别指标骗局:以某家捕捞季节和主力追踪为例讲解
    C++ 语句
    C++ 表达式
  • 原文地址:https://www.cnblogs.com/scgw/p/2033729.html
Copyright © 2020-2023  润新知