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

下载链接

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 \文件夹中:

<%@ 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字符串匹配:

  1. 以字符“ article /”的序列开头。
  2. 在第一个“ /”之后包含一个或多个数字字符。
  3. 在第二个“ /”之后包含一个或多个字母数字或“ _”或“-”字符。

请注意,正则表达式的某些部分在括号内。这些括号创建捕获组,以后可以通过使用反向引用在规则中对其进行引用。

定义动作

由于我们要创建的规则应该重写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}&amp;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}&amp;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://127.0.0.1/article/234/some-title。您应该看到的是没有从服务器收到任何响应的浏览器。但是,如果您请求http://localhost/article/234/some-title,则Web服务器将成功响应。

失败的显示如下:

成功显示如下:

概要

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

(0)

相关推荐

  • 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 下载链接 https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859E

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

    IIS版本:IIS 7.5 URL Rewrite组件:IIS URL Rewrite Module(http://www.iis.net/downloads/microsoft/url-rewrite) 根据需要,点击右侧的下载链接(操作系统是64位的,就下载x64版本:32位的系统,就下载x86版本) 注意的是,目前安装的版本都是英文的了. 下载完成之后,安装重写模块. 下载的是本地msi包(rewrite_amd64.msi或者rewrite_x86.msi),双击安装即可(安装之前最好先

  • ASP.NET中URL Routing和IIS上URL Rewriting的区别

    前言 前面有2篇帖子提到了关于URL Routing的特性,但是发现有很多人误会URL Routing就是URl Rewriting,其实2个虽然都提供相似的功能(提高友好的URL方便搜索引起收录),但是2者的原理和运行周期是完全不一样的,本篇文章我们就来分析一下具体有什么不同. 例子 在分析原理之前,我们先来做一个例子测试一下(IIS URL Rewrite模块需要IIS7的支持). 1.为Customer/1的URL建立对应的MVC程序 首先建立一个普通的MVC3程序,建立一个简单的Cust

  • IIS8中安装和使用URL重写工具(URL Rewrite)的方法

    本文记录了在IIS8下安装和使用URL Rewrite插件的步骤,详细举例说明如何使用URL重写工具实现301重定向的功能. 下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开IIS(Internet 信息服务管理器),在管理器主页中找到管理项,打开Web平台安装程序,如下图: 在Web平台安装程序中选择产品>服务器,在列表中找到URL重写工具,点击

  • IIS 7.5 使用URL Rewrite模块的简单设置实现网页跳转

    我们都知道Apache可以在配置文件里方便的设置针对网页或网站的rewrite,但是最近接手了一组IIS服务器,发现这货简单的没有配置文件可让我写,但是我却要实现网页rewrite的功能.怎么办呢,google了一下,果断的找到了内容. IIS URL Rewrite模块: 官方下载地址: http://www.iis.net/downloads/microsoft/url-rewrite 官方说明文档: http://www.iis.net/learn/extensions/url-rewri

  • ASP.NET中URL Rewrite的具体实现方法

    之前觉得这个话题已经被谈滥了.URL Rewrite早已经被广大开发人员所接受,网上关于URL Rewrite的组件和文章也层出不穷,但是总是让我感觉意犹未尽,于是最终还是忍不住提笔写了这系列文章.这些文章不会谈论URL Rewrite的价值与意义,而只会谈论纯技术的内容.文章中也不会有详尽地实现分析,而是结合了我的经验,从应用角度来讲解这个话题.您已经知道的,您还不知道的,别处已经讲过的,或者还没有讲过的,希望这系列文章的"旧事重提"不会让您觉得沉闷,并且能让您了解ASP.NET中U

  • destoon之URL Rewrite(伪静态)设置方法详解

    1.如果您的服务器支持.htaccess,则无需设置,网站根目录下的.htaccess已经设置好规则. 规则(参考http://download.destoon.com/rewrite/htaccess.txt)为: # Destoon B2B Rewrite Rules ErrorDocument 404 /404.php RewriteEngine On RewriteBase / RewriteRule ^(.*)\.(asp|aspx|asa|asax|dll|jsp|cgi|fcgi|

  • URL Rewrite的设置方法

    URL Rewrite需要服务器的支持!在启用此设置之前,请确保服务器上已作出了正确的设置,设置方法请参看下边的"Apache下的设置方法"和"IIS下的设置方法"!Apache下的设置方法 复制代码 代码如下: 打开 Apache 的配置文件 httpd.conf .  将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉  在 httpd.conf中添加: <IfModule mod_rewrite.c

  • Windows Server 2016中安装PHP Manager、ARR3.0或者URL Rewrite 2.0无法成功的解决办法

    Windows Server 2016中安装PHP Manager.ARR3.0或者URL Rewrite 2.0无法成功的解决办法 如图: 无法安装原因都是这几个工具无法识别10.0这个版本,可以修改注册表来先完成安装,然后再改回去 PHPManager的修改方法如下: 打开注册表工具(运行Regedt32),找到: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters 看MajorVersion 是DWOR

  • Ubuntu下Nginx配置ThinkPHP的Pathinfo和URl Rewrite模式

    概述 在上一篇文章Nginx配置Thinkphp支持URL Rewrite中已经介绍了如何配置Nginx支持ThinkPHP的URL Rewrite,但是上文针对的是Centos平台,这次因为某些特殊的原因,服务器环境必须用ubuntu,本来以为和Cetons中一模一样,但是配置完了发现不能使用,所以就百度了一些文章. 配置方法 TP官方解决方案 复制代码 代码如下: location ~ .php         {                 #原有代码                

随机推荐