咔叽游戏

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 621|回复: 0

[其它服务器] URL Rewrite Module 2.1 URL重写模块规则写法

[复制链接]
  • TA的每日心情
    无聊
    2019-5-27 08:20
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    发表于 2020-12-18 15:59:00 | 显示全部楼层 |阅读模式
    先决条件

    本演练需要满足以下先决条件:
    IIS安装 URL Rewrite Module 2.1
    短地址http://www.iis.net/extensions/URLRewrite
    下载页面
    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角色服务的IIS 7或更高版本。
    URL重写模块已安装。有关更多信息,请参见使用URL重写模块。
    设置测试网页

    为了演示URL重写模块如何工作,我们将使用一个简单的测试ASP.NET页面。该页面读取Web服务器变量,并在浏览器中输出它们的值。
    复制以下ASP.NET代码,并将其放在名为article.aspx的文件的%SystemDrive%\ inetpub \ wwwroot \文件夹中:
    1. <%@ Page Language="C#" %>
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <html xmlns="http://www.w3.org/1999/xhtml">
    4. <head>
    5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    6. <title>URL Rewrite Module Test</title>
    7. </head>
    8. <body>
    9.   <h1>URL Rewrite Module Test Page</h1>
    10.   <table>
    11.    <tr>
    12.      <th>Server Variable</th>
    13.      <th>Value</th>
    14.    </tr>
    15.    <tr>
    16.      <td>Original URL: </td>
    17.      <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
    18.    </tr>
    19.    <tr>
    20.      <td>Final URL: </td>
    21.      <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
    22.    </tr>
    23.   </table>
    24. </body>
    25. </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>包含此规则定义的部分:
    1. <rewrite>
    2. <rules>
    3. <rule name="Rewrite to article.aspx">
    4.   <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
    5.   <action type="Rewrite" url="article.aspx?id={R:1}&title={R:2}" />
    6. </rule>
    7. </rules>
    8. </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>集合中,使其成为该集合中的第一条规则:
    1. <rule name="Fail bad requests">
    2. <match url=".*"/>
    3. <conditions>
    4. <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
    5. </conditions>
    6. <action type="AbortRequest" />
    7. </rule>
    复制代码
    该<rewrite>部分应类似于以下代码:
    1. <rewrite>
    2. <rules>
    3. <rule name="Fail bad requests">
    4.   <match url=".*"/>
    5.   <conditions>
    6.   <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
    7.   </conditions>
    8.   <action type="AbortRequest" />
    9. </rule>
    10. <rule name="Redirect from blog">
    11.   <match url="^blog/([_0-9a-z-]+)/([0-9]+)" />
    12.   <action type="Redirect" url="article/{R:2}/{R:1}" redirectType="Found" />
    13. </rule>
    14. <rule name="Rewrite to article.aspx">
    15.   <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
    16.   <action type="Rewrite" url="article.aspx?id={R:1}&title={R:2}" />
    17. </rule>
    18. </rules>
    19. </rewrite>
    复制代码
    让我们分析规则以了解它的作用。
    <match url=".*"/>
    上面的元素表示该规则将匹配任何URL字符串。
    <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
    上面的元素为规则添加了一个条件,该条件通过读取服务器变量HTTP_HOST来检索主机头值,并将其与模式“ localhost”进行匹配,然后取反结果。换句话说,该条件验证主机头与“ localhost”不匹配。
    <action type="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标头和服务器变量进行重写决策的能力。

    原文地址:https://www.jb51.net/article/201103.htm

    QQ|免责声明|小黑屋|手机版|Archiver|咔叽游戏

    GMT+8, 2024-3-29 14:58

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表