博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ISAPI_Rewrite应用技巧与方法
阅读量:4884 次
发布时间:2019-06-11

本文共 4019 字,大约阅读时间需要 13 分钟。

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

 

RewriteEngine
on
 
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永久重定向至,规则同上,详细的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应用技巧与方法》后,您可以通过阅读《》进一步了解ISAPI_Rewrite的原理,以及Rewrite Rule指令格式语法解析。

转载于:https://www.cnblogs.com/scgw/archive/2011/05/01/2033729.html

你可能感兴趣的文章
RE : 球体波浪倒计时
查看>>
python+Requests
查看>>
express总结(一)
查看>>
POJ 3384 Feng Shui (半平面交)
查看>>
设置系统导航栏
查看>>
Android 中keyEvent的消息处理(转) -- view部分
查看>>
前端基础-html 字体标签,排版标签,超链接,图片标签
查看>>
arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值
查看>>
six day--面向对象
查看>>
python队列、线程、进程、协程(转)
查看>>
java 计算 1到10 的 阶层的和(采用递归的方法)
查看>>
在react项目当中使用redux
查看>>
游戏开发之UE4添加角色到场景中
查看>>
gulp创建完整的项目流程
查看>>
APICloud开发小技巧(一)
查看>>
UVa548
查看>>
如何在SpringBoot中集成JWT(JSON Web Token)鉴权
查看>>
python的pydoc与help
查看>>
js动画实现透明度动画
查看>>
css3实现圆形逐渐减少动画
查看>>