URL Rewrite Module 2.1 URL重写模块规则写法
先决条件
本演练需要满足以下先决条件:
iis安装 url rewrite module 2.1
短地址http://www.iis.net/extensions/urlrewrite
下载页面
https://www.iis.net/downloads/microsoft/url-rewrite#additionaldownloads
下载链接
启用了asp.net角色服务的iis 7或更高版本。
url重写模块已安装。有关更多信息,请参见使用url重写模块。
设置测试网页
为了演示url重写模块如何工作,我们将使用一个简单的测试asp.net页面。该页面读取web服务器变量,并在浏览器中输出它们的值。
复制以下asp.net代码,并将其放在名为article.aspx的文件的%systemdrive%\ inetpub \ wwwroot \文件夹中:
<%@ page language="c#" %> <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>url rewrite module test</title> </head> <body> <h1>url rewrite module test page</h1> <table> <tr> <th>server variable</th> <th>value</th> </tr> <tr> <td>original url: </td> <td><%= request.servervariables["http_x_original_url"] %></td> </tr> <tr> <td>final url: </td> <td><%= request.servervariables["script_name"] + "?" + request.servervariables["query_string"] %></td> </tr> </table> </body> </html>
复制此文件后,浏览http://localhost/article.aspx并检查页面是否在浏览器中正确呈现。
创建重写规则
我们将创建一个简单的重写规则,该规则将使用以下格式重写url:
http://localhost/article/342/some-article-title
至:
http://localhost/article.aspx?id=342&title=some-article-title。
我们将使用iis管理器中的url重写ui创建一个重写规则。为此,请按照下列步骤操作:
1、转到iis管理器。
2、选择默认网站。
3、在“功能视图”中,单击“ url重写”。
4、在右侧的“操作”窗格中,单击“添加规则…”。
5、在“添加规则”对话框中,选择“空白规则”,然后单击“确定”。
现在,您必须定义实际的重写规则。在url重写模块中,通过指定四项必需的信息来定义重写规则:
- 规则名称。
- 用于匹配url字符串的模式。
- 可选的一组条件。
- 匹配模式并执行所有条件检查是否成功时要执行的操作。
命名规则
在“名称”文本框中,输入将唯一标识该规则的名称,例如:“重写为article.aspx”。
定义模式
在模式文本框中,输入以下字符串:
^article/([0-9]+)/([_0-9a-z-]+)
此字符串是一个正则表达式,它指定该模式将与满足以下条件的任何url字符串匹配:
- 以字符“ article /”的序列开头。
- 在第一个“ /”之后包含一个或多个数字字符。
- 在第二个“ /”之后包含一个或多个字母数字或“ _”或“-”字符。
请注意,正则表达式的某些部分在括号内。这些括号创建捕获组,以后可以通过使用反向引用在规则中对其进行引用。
定义动作
由于我们要创建的规则应该重写url,因此请选择“操作”组框中列出的“重写操作”类型。在“重写url:”文本框中,输入以下字符串:
article.aspx?id={r:1}&title={r:2}
此字符串指定应将输入url重写为的新值。请注意,对于查询字符串参数的值,我们使用了{r:1}和{r:2},它们是对使用括号在规则模式中定义的捕获组的反向引用。
保留所有其他设置的默认值。“编辑入站规则”属性页面应类似于以下页面:
通过单击右侧的“应用”来保存规则。
查看配置文件中的重写规则
重写规则存储在applicationhost.config文件或web.config文件中。要检查我们刚刚创建的规则的配置,请打开%systemdrive%\ inetpub \ wwwroot中的web.config文件。在此文件中,您应该看到<rewrite>包含此规则定义的部分:
<rewrite> <rules> <rule name="rewrite to article.aspx"> <match url="^article/([0-9]+)/([_0-9a-z-]+)" /> <action type="rewrite" url="article.aspx?id={r:1}&title={r:2}" /> </rule> </rules> </rewrite>
上面的语法也适用于在windows azure网站(waws)的web.config中配置url重写。
测试重写规则
要测试该规则是否正确重写了url,请打开web浏览器并请求以下url:
http://localhost/article/234/some-title
您应该看到web服务器上的重写规则已将原始url更改为article.aspx,并且已将“ 234”和“ some-title”作为查询字符串参数的值传递。
创建重定向规则
现在,我们将创建一个重定向规则,该规则将以以下格式重定向所有url:
http://localhost/blog/some-other-title/543
格式如下:
http://localhost/article/543/some-other-title
重定向规则使一个以上的url可以指向一个网页。
为此,请在iis管理器中打开url重写功能视图ui。单击“添加规则…”,然后再次选择“空白规则”模板。
在“编辑规则”页面中,输入以下内容:
- 名称:从博客重定向(这是规则的唯一名称。)
- 模式:^ blog /([[_ 0-9a-z-] +)/([0-9] +)(此模式将匹配以“ blog”开头的url字符串,并将url的第二和第三部分捕获为反向引用。)
- 行动:重定向(重定向动作将导致重定向响应发送回浏览器。)
- 重定向url:article / {r:2} / {r:1}(此替换字符串将用作重定向url;请注意,它使用反向引用来保留和重新排列模式匹配期间捕获的原始url。)
输入名称,样式和操作,如下所示:
输入重定向url,如下所示:
保留所有其他设置的默认值。通过单击右侧的“应用”来保存规则。
测试重定向规则
要测试该规则是否正确重定向了请求,请打开web浏览器并请求以下url:
http://localhost/blog/some-other-title/323
您应该看到,http://localhost/article/323/some-other-title由于执行重定向规则,浏览器被重定向到,然后根据您先前创建的重写规则重写了请求。
创建访问阻止规则
我们将创建的第三条规则用于阻止对网站的所有请求(如果这些请求未设置主机头)。当您要防止通过针对服务器的ip地址而不是使用主机名发出http请求而进行的黑客尝试时,这种类型的规则很有用。
我们将在不使用iis管理器的情况下创建此规则。%systemdrive%\inetpub\wwwroot\在本文开头用于article.aspx测试文件的文件夹中打开web.config文件。找到该<rewrite>部分。将以下规则插入<rules>集合中,使其成为该集合中的第一条规则:
<rule name="fail bad requests"> <match url=".*"/> <conditions> <add input="{http_host}" pattern="localhost" negate="true" /> </conditions> <action type="abortrequest" /> </rule>
该<rewrite>部分应类似于以下代码:
<rewrite> <rules> <rule name="fail bad requests"> <match url=".*"/> <conditions> <add input="{http_host}" pattern="localhost" negate="true" /> </conditions> <action type="abortrequest" /> </rule> <rule name="redirect from blog"> <match url="^blog/([_0-9a-z-]+)/([0-9]+)" /> <action type="redirect" url="article/{r:2}/{r:1}" redirecttype="found" /> </rule> <rule name="rewrite to article.aspx"> <match url="^article/([0-9]+)/([_0-9a-z-]+)" /> <action type="rewrite" url="article.aspx?id={r:1}&title={r:2}" /> </rule> </rules> </rewrite>
让我们分析规则以了解它的作用。
<match url=".*"/>
上面的元素表示该规则将匹配任何url字符串。
<add input="{http_host}" pattern="localhost" negate="true" />
上面的元素为规则添加了一个条件,该条件通过读取服务器变量http_host来检索主机头值,并将其与模式“ localhost”进行匹配,然后取反结果。换句话说,该条件验证主机头与“ localhost”不匹配。
<action type="abortrequest" />
上面的元素告诉url重写模块结束http请求。
测试访问阻止规则
要测试此规则,请打开web浏览器并向发出请求。您应该看到的是没有从服务器收到任何响应的浏览器。但是,如果您请求http://localhost/article/234/some-title,则web服务器将成功响应。
失败的显示如下:
成功显示如下:
概要
在本演练中,您学习了如何通过使用iis管理器或手动编辑web.config文件来配置url重写规则。在本演练中创建的规则演示了url重写模块的一些重要功能,例如正则表达式支持以及使用http标头和服务器变量进行重写决策的能力。
推荐阅读
-
IIS URL Rewrite Module防盗链规则配置方法
-
apache(rewrite 对 模块url进行重写),出错:The requested URL *** was not found on this serve
-
URL Rewrite Module 2.1 URL重写模块规则写法
-
真正可用的IIS的ISAPI-Rewrite伪静态URL图片防盗链规则写法
-
iis7配置zend framework的地址重写规则[url_rewrite]
-
IIS URL Rewrite Module防盗链规则配置方法
-
php伪静态(url rewrite mod_rewrite模块重写)详解
-
apache(rewrite 对 模块url进行重写),出错:The requested URL *** was not found on this serve
-
php伪静态 URL REWRITE重写规则介绍
-
URL Rewrite Module 2.1 URL重写模块规则写法