欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

IIS URL Rewrite Module防盗链规则配置方法

程序员文章站 2023-09-28 11:49:14
iis版本:iis 7.5 url rewrite组件:iis url rewrite module() 根据需要,点击右侧的下载链接(操作系统是64位的,就下...

iis版本:iis 7.5

url rewrite组件:iis url rewrite module()

根据需要,点击右侧的下载链接(操作系统是64位的,就下载x64版本;32位的系统,就下载x86版本)

注意的是,目前安装的版本都是英文的了。

IIS URL Rewrite Module防盗链规则配置方法

下载完成之后,安装重写模块。
下载的是本地msi包(rewrite_amd64.msi或者rewrite_x86.msi),双击安装即可(安装之前最好先停止iis服务,如果iis服务没停的话,安装完成后会要求重启系统。)

IIS URL Rewrite Module防盗链规则配置方法

安装完成后,打开“internet 信息服务(iis)管理器”,就可以看见模块中多了一个url rewrite 模块。

IIS URL Rewrite Module防盗链规则配置方法

进入需要设置的站点,双击 url rewrite 图标,进入设置界面。

IIS URL Rewrite Module防盗链规则配置方法

点击add rule(s)输入rewrite重写规则。

确认无误后,点击右栏的“应用”按钮,大功告成

当然你也可以从原来配置的伪静态文件导入:支持isapi的httpd.ini或.htaccess

案例:

很友好的url地址,使访问的人很容易记住。要求你的用户记住“ //www.jb51.net/article.aspx?id=342&;title=url-rewrite-walkthrough” 这样的网址并不是件很美妙的事。如果给用户提供如下url地址:http://www.pipima.com/article/342/url-rewrite-walkthrough,就能更好引起共鸣和更容易被记住。
通过iis url rewrite 模块( url rewrite module)你可以很方便建立这一逻辑而不需要修改正在使用的rewrite maps代码.我将告诉你从iis管理器里来实现。打开iis管理器,选择“default web site”,在“功能视图”单击“url rewrite”,然后在“操作”栏,单击“add rules…”,在“select a rule templates”对话框选择“blank rule”,将打开“edit rule”属性页,按如下步骤定义实际的重写规则(rewrite rule):
1、规则名称。
2、匹配url字符串所使用的模式。
3、设置条件选项。
4、模式匹配和所有条件检查成功后执行的操作。
为了实现下面的例子,“edit rule”属性页如下图所示:

IIS URL Rewrite Module防盗链规则配置方法

规则的名称应该是唯一(不重复)的,匹配字符串“^article/([0-9]+)/([_0-9a-z-]+)”是正则表达式,将匹配满足一下标准的任何url字符串:
1、开始于“article/”字符序列。
2、在“/”后包含一个或多个数字字符。
3、在第二个“/”后包含一个或多个字母或“_”或“-”。
因为我们创建一个支持重写url的规则,因此规则类型是“rewrite“。重写字符串(rewrite ur)“article.aspx?id={r:1}&title={r:2}”指定一个新值用于输入被重写的url。参数我们使用“ {r:1} ”和“{r:2}”,他们将返回一组通过规则匹配定义的引用(reference)。关于返回引用( back reference)你可以参考:url rewrite module configuration reference,有关创建重写规则的更多内容见:creating rewrite rules for the url rewrite module
一个很重要的就是url rewrite模块是需要被安装才可以工作,你可以如下两个版本:
x86版本:
x64版本:
该模块(目前)只支持iis7.0,你应该运行iis7.0有利于使用它。如果你的项目是使用visual studio for web developers开发,那么项目应该配置成在iis7.0下运行,而不是其他的web服务器。
有关url rewrite模块的详细内容见:http://learn.iis.net/page.aspx/460/using-url-rewrite-module/

注意:

1.原来的$1换成{r:1},其他语法少许变化<rewrite url="~/test/([a-za-z0-9_\-]+)/(\d+).html\?{0,1}(.*)$" to="~/test.aspx?id=$4&$5" processing="stop"/>
换成

<rule name="orgpage" stopprocessing="true">
<match url="^test/([a-za-z0-9_\-]+)/(\d+).html\?{0,1}(.*)$" />
<action type="rewrite" url="test.aspx?id={r:1}&{r:2}" />
</rule>

2.urlrewriter中 url="~/module/“ ,在url rewrite module中必须换成^module/,否则就算test通过,在实际环境中也无法解析;
3.以前 urlrewriter中 url="^/([a-za-z0-9_]+)“是可以的,但是在url rewrite module中不行,必须添加参数
<conditions logicalgrouping="matchall">

<add input="{http_host}" pattern="^blog\.lehu\.shu\.edu\.cn$" />
<add input="{request_filename}" matchtype="isfile" negate="true" />
<add input="{request_filename}" matchtype="isdirectory" negate="true" />
</conditions>

4.另外需要注意iis6的config转换到iis7的时候,需要删除applicationhost.config中<handlers accesspolicy="read, script" />的多余参数,或者干脆重新建立,否则会出现很多奇怪的问题,我昨天为了这个搞了好几个小时,后来才发现问题。
总体上说,iis7比iis6稳定些了,到现在位置,iis6中总是出现的缓冲池死在iis7中很少出现。具体情况还需要测试。
规则定义截图:
IIS URL Rewrite Module防盗链规则配置方法web.config中的规则定义:

复制代码 代码如下:

<rewrite>
    <rules>
        <rule name="requestblockingrule1" enabled="true" stopprocessing="true">
            <match url=".*" />
            <conditions>
                <add input="{http_referer}" pattern="^$" negate="true" />
                <add input="{http_referer}" pattern="^http://(.*\.)?(cnblogs\.com)/.*$" negate="true" />
            </conditions>
            <action type="customresponse" statuscode="404" />
        </rule>
    </rules>
</rewrite>