URL Rewrite Module 2.1 URL重写模块规则写法

URL Rewrite Module 2.1 URL重写模块规则写法,第1张

URLRewriteModule2.1URL重写模块规则写法

URL重写模块是IIS的扩展,可以作为独立的IIS服务器下载,也可以预装在WindowsAzure(WAWS)上的任何网站上供您使用。本教程将指导您如何为URL重写模块创建和测试一组重写规则。

先决条件

本次演练需要满足以下先决条件:

IIS安装URL重写模块2.1

Http://www.iis.net/extensions/urlRewrite短URL

下载页面

https://www.IIS.net/downloads/Microsoft/URL-rewrite#additionaldownloads

下载链接

https://download.Microsoft.com/download/1/2/8/128e2e22-C1B9-44a4-BE2A-5859ed1d4592/rewrite_amd64_en-us.MSI

https://download.Microsoft.com/download/1/2/8/128e2e22-C1B9-44a4-BE2A-5859ed1d4592/rewrite_amd64_zh-cn.MSI

启用了ASP.NET角色服务的IIS7或更高版本。
URL重写模块已经安装。有关更多信息,请参见使用URL重写模块。

设置测试网页

为了演示URL重写模块是如何工作的,我们将使用一个简单的测试ASP.NET页面。该页面读取Web服务器变量,并在浏览器中输出它们的值。

复制以下ASP.NET代码,并将其放在名为article.aspx的文件的%%systemdrive%\inetpub\wwwroot\文件夹中:

<%@PageLanguage="C#"%> <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <title>URLRewriteModuleTest</title> </head> <body> <h1>URLRewriteModuleTestPage</h1> <table> <tr> <th>ServerVariable</th> <th>Value</th> </tr> <tr> <td>OriginalURL:</td> <td><%=Request.ServerVariables["HTTP_X_ORIGINAL_URL"]%></td> </tr> <tr> <td>FinalURL:</td> <td><%=Request.ServerVariables["SCRIPT_NAME"]+"?"+Request.ServerVariables["QUERY_STRING"]%></td> </tr> </table> </body> </html>

复制此文件后,浏览http://localhost/article.aspx并检查页面是否在浏览器中正确呈现。

创建重写规则

我们将创建一个简单的重写规则,使用以下格式重写URL:

http://本地主机/article/342/some-article-title

收件人:

http://localhost/article.aspx?id=342&标题=某篇文章标题.

我们将使用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> <rules> <rulename="Rewritetoarticle.aspx"> <matchurl="^article/([0-9]+)/([_0-9a-z-]+)"/> <actiontype="Rewrite"url="article.aspx?id={R:1}&amp;title={R:2}"/> </rule> </rules> </rewrite>

    上述语法也适用于在WindowsAzure网站(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文件。这

    <rulename="Failbadrequests"> <matchurl=".*"/> <conditions> <addinput="{HTTP_HOST}"pattern="localhost"negate="true"/> </conditions> <actiontype="AbortRequest"/> </rule>

    <rewrite> <rules> <rulename="Failbadrequests"> <matchurl=".*"/> <conditions> <addinput="{HTTP_HOST}"pattern="localhost"negate="true"/> </conditions> <actiontype="AbortRequest"/> </rule> <rulename="Redirectfromblog"> <matchurl="^blog/([_0-9a-z-]+)/([0-9]+)"/> <actiontype="Redirect"url="article/{R:2}/{R:1}"redirectType="Found"/> </rule> <rulename="Rewritetoarticle.aspx"> <matchurl="^article/([0-9]+)/([_0-9a-z-]+)"/> <actiontype="Rewrite"url="article.aspx?id={R:1}&amp;title={R:2}"/> </rule> </rules> </rewrite>

    我们来分析一下规则,了解一下它的作用。

    <匹配url="。*"/>;

    上述元素表明规则将匹配任何URL字符串。

    <addinput="{HTTP_HOST}"pattern="localhost"negate="true"/>;

    上述元素向规则添加了一个条件,该条件通过读取服务器变量HTTP_HOST来检索主机头值,将其与模式“localhost”进行匹配,然后对结果求反。换句话说,该条件验证主机头与“localhost”不匹配。

    <actiontype="AbortRequest"/>。

    上面的元素告诉URL重写模块结束HTTP请求。

    测试访问阻止规则

    要测试此规则,请打开Web浏览器并向http://127.0.0.1/article/234/some-title发送请求。您应该会看到一个没有从服务器收到任何响应的浏览器。但是,如果您请求http://localhost/article/234/some-title,Web服务器将会成功响应。

    故障显示如下:

    成功显示如下:

    概要

    在本演练中,您学习了如何通过使用IIS管理器或手动编辑Web.config文件来配置URL重写规则。本演练中创建的规则演示了URL重写模块的一些重要功能,如正则表达式支持和使用HTTP头和服务器变量做出重写决策的能力。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/774086.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存