翻译:为 URL Rewrite 模块创建重写规则
原文名称:Creating Rewrite Rules for the URL Rewrite Module
原文作者:Ruslan Yakushev
URL Rewrite 模块是 IIS 服务器的一个可下载的扩展模块,在 Windows Azure Web Sites (WAWS) 已经是预安装的,可以直接使用。这个演练教程将带领你创建并验证一系列常用的 URL 重写规则。
前置条件
这个演练需要下列条件:
1. IIS7 或者更高版本,ASP.NET 服务必须启用。
2. 已经安装了 URL Rewrite 模块,详细内容参见:Using the URL Rewrite Module.
创建测试页面
下面的练习将使用 IIS 的默认配置,默认网站将位于 %SystemDrive%\inetpub\wwwroot\ 文件夹中。
为了演示 URL Rewrite 模块是如何工作的,我们将创建一个简单的 ASP.NET 页面,这个页面会读取 Web Server 的变量并把它的值输出到页面中。
在 wwwroot 文件夹中,创建名为 article.apsx 的文件,将下面的 ASP.NET 代码复制到这个文件中。
<%@ 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 ,确认可以在浏览器中正确看到页面内容。
创建重写规则
我们将创建下面的简单重写规则。
原地址:http://localhost/article/342/some-article-title
重写后
目标地址:http://localhost/article.aspx?id=342&title=some-article-title
我们将使用 IIS 管理器中的 URL Rewrite 管理界面来创建重写规则,请参考下列步骤:
1. 打开 IIS 管理器
2. 选中 Default Web Site
3. 在特性视图中,点击 URL Rewrite
4. 在右侧的 Action 面板中,点击 Add Rules... 添加规则
5. 在 Add Rules 添加规则对话框中,选择 Blank Rule 空白规则,然后点击 Ok 确定。
现在可以定义实际的重写规则了。在 URL Rewrite 模块中,每个重写规则必须提供下面的四个信息:
1. 规则名称
2. 匹配目标 URL 的正则表达式模板。
3. 条件选项
4. 在模板匹配,并且条件成立的情况下,需要采取的动作。
管理规则
在 Name 名称文本框中,输入一个唯一的规则名称,比如:"Rewrite to article.aspx"
定义匹配的正则表达式
在 Pattern 匹配模板文本框中,输入如下的正则表达式。
^article/([0-9]+)/([_0-9a-z-]+)
这是一个正则表达式,将会匹配符合下面规则的众多 URL 地址。
1. 开始的字符序列是 "article/"
2. 在第一个 / 之后,包含一个或者多个数字字符
3. 在第二个 / 之后,包含一个或者多个字母,数字,下划线或者连字线。
注意,在正则表达式中使用了圆括号,圆括号用来创建捕获组,在后面可以通过反向引用来使用它。
定义动作
因为我们定义的规则希望重写 URL,在 Action Type 下拉列表框中选择 Rewrite 重写动作类型,在重写目标的 Rewrite URL 输入框中,输入下面的内容。
article.aspx?id={R:1}&title={R:2}
这里使用指定了一些变量用于重写 URL,注意在查询字符串中,我们使用了 {R:1} 和 {R:2},这些就是刚刚提到的反向引用。
对于其它设置我们使用默认值,这样整个编辑规则的页面应该看起来如下所示。
在右边的面板中,点击 Apply 保存规则。
在配置文件中查看重写规则
我们定义的重写规则将会保存在 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 Web Sites (WAWS) 中的 Web.config 。
测试重写规则
打开浏览器,在地址栏中输入:http://localhost/article/234/some-title
你会在页面中看到服务器的重写规则将 URL 修改为 Article.aspx,并且将 234 和 "some-title" 作为查询参数传递。
创建重定向规则
下面我们创建一个重定向规则。
源地址:http://localhost/blog/some-other-title/543
定向为:http://localhost/article/543/some-other-title
重定向规则可以将多个 URL 地址定向到同一个地址页面。
打开 IIS 管理器的 URL Rewrite 特性窗口,点击 Add Rule(s)... 添加规则,再次选择 Blank Rule 空白模板。
在编辑规则的页面中,输入下列内容:
1. 规则名称:Redirect from blog (这是规则的唯一名称)
2. 匹配模板:^blog/([_0-9a-z-]+)/([0-9]+) (这个模板用来匹配以 blog 开头的地址,捕获第二和第三节用于反向引用)
3. 动作:Redirect (重定向动作导致向浏览器发送一个 redirect 响应)
4. 目的 URL:article/{R:2}/{R:1} (这个模板用于重定向,注意,这里使用反向引用使用了前面的捕获组)
输入之后的界面应该如下所示。
输入 redirect URL 之后。
其它配置保持不变,在右面的面板中点击 Apply 应用规则。
测试重定向规则
打开一个浏览器,在地址栏中输入:http://localhost/blog/some-other-title/323
在浏览器中,你会看到地址被重定向到 http://localhost/article/323/some-other-title。
创建访问限制规则
第三个规则,我们将阻止没有特定请求头的请求。这个规则可以用来阻止使用 Ip 地址代替主机名称的黑客攻击。
这次,我们不使用 IIS 管理器来创建规则,而是直接在位于 %SystemDrive%\inetpub\wwwroot\ 的 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>
<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 ,然后取反。也就是说,这个条件检查请求地址中的 Host 不包含 localhost。
<action type="AbortRequest" />
这个动作中止请求的处理。
测试限制访问规则
打开浏览器,通过 Ip 地址访问我们的服务器:http://127.0.0.1/article/234/some-title,你应该没有从服务器得到任何响应。如果你使用 http://localhost/article/234/some-title,访问应该成功。
不成功的访问结果如下。
而成功的访问如下。
总结
在这个演练中,我们学习了如何创建 URL Rewrite 规则,既通过 IIS 管理器方式,也通过手动方式。这个演练演示了 URL Rewrite 模块的主要使用方式,比如正则表达式的支持,以及通过 HTTP 请求头的信息和服务器变量来作为重写的条件。
翻译:为 URL Rewrite 模块创建重写规则的更多相关文章
- IIS7伪静态化URL Rewrite模块
原文 IIS7伪静态化URL Rewrite模块 在Win7安装了IIS7.5之后,搭建一些网站或者博客,但是IIS7.5本身没有URL Rewrite功能,也就是无法实现网址的伪静态化. 从网上找了 ...
- IIS 7.5 使用URL Rewrite模块简单设置网页跳转
原文 IIS 7.5 使用URL Rewrite模块简单设置网页跳转 我们都知道Apache可以在配置文件里方便的设置针对网页或网站的rewrite,但是最近接手了一组IIS服务器,发现这货简单的没有 ...
- APACHE 服务器开启URL REWRITE模块的方法
最近做wordpress,发现固定链接总是设置不了.后来发现是由于apache服务器的URL REWIRITE模块没有开启导致. 查询了资料之后终于设置成功,记录下步骤: 1:开启apache的url ...
- apache开启url rewrite模块
在把服务器数据转移到本地服务器之后,本地打开首页出现排版紊乱等问题,经过大神指点说是url rewrite的问题. 本篇文章主要写怎样开启apache的url rewrite功能. 打开Apache2 ...
- iis服务器配置 url rewrite 模块
从网上找了一下,原来微软IIS官方网站给IIS7及以后续版本提供了个URL重写组件. 下载地址:https://www.iis.net/downloads/microsoft/url-rewrite ...
- IIS7 URL Rewrite 用法实例
原文:IIS7 URL Rewrite 用法实例 很友好的URL地址,使访问的人很容易记住.要求你的用户记住" http://www.contoso.com/article.aspx?id= ...
- windows服务器下IIS7 安装URL Rewrite(URL重写)模块
URL Rewrite Module是一个基于规则的URL重写引擎,用于在URL被Web服务器处理之前改变请求的URL.对于动态Web应用程序,它可以为用户和seo/seo.html" ta ...
- ASP.NET Core URL Rewrite中间件
URL重写是基于一个或多个预置规则修改请求URL的行为.URL重写在资源位置和访问地址之间创建了一种抽象,这样二者之间就减少了紧密的联系.URL重写有多种适用的场景: 临时或永久移动或替换服务器资源, ...
- [转帖]Nginx rewrite模块深入浅出详解
Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...
随机推荐
- Crypto库实现PKCS7签名与签名验证
在windows中,可以直接使用微软提供的crypto库实现PKCS7签名与签名验证.签名接口函数为CryptSignMessage,其接口定义为: BOOL WINAPI CryptSignMess ...
- (转)用Eclipse进行C++开发时Bianry not found的问题解决
本文转载自:http://blog.csdn.net/baimafujinji/article/details/49722399 由于Visual Studio体积过于庞大,很多人选择在Eclipse ...
- Python的更多内容
到目前为止,我们已经学习了绝大多数常用的Python知识.在这一章中,我们将要学习另外一些方面的Python知识,从而使我们对Python的了解更加 完整 . 1.特殊的方法 在类中有一些特殊的方法具 ...
- FastReport使用总结三——条码简介
FastReport Desinger中支持的Barcode类型如下图所示: 设置其Barcode属性可以实现支持不同的条码类型. 注意: 支持的条码类型说明如下: 总结: 1.通过设置Barcode ...
- CSS常用样式整理
元素边框显示圆角:-moz-border-radius适用于火狐浏览器,-webkit-border-radius适用于Safari和Chrome两种浏览器. 浏览器渐变背景颜色: FILTER: p ...
- Android AVD创建及设置中各参数详解
设置AVD时有些参数比较模糊,特地找了篇文章,大家参考下! 本文根据如下的模拟器安装做一些解释: Name:自定义虚拟的名称,不能有空格或者其他非法字符,否则不能创建,即Creat AVD不能高亮点击 ...
- Perl system(cmd) 和 `cmd` 的区别探讨
在perl中系统调用有两种方式,一种是system(cmd),另一种是`system`以前一直没注意,这两种方式的区别,还以为是一样的,今天写脚本的时候,忽然想要获取命令的返回值,然后,用了my $r ...
- Ubuntu防火墙 UFW 设置
Ubuntu防火墙 UFW 设置 1.安装 sudo apt-get install ufw 2.启用 sudo ufw enable sudo ufw default deny 运行以上两条命令后, ...
- linq简介
语言集成查询(Language INtegrated Query,LINQ)是一项微软技术,新增一种自然查询的SQL语法到.NET Framework的编程语言中,可支持Visual Basic .N ...
- Hadoop学习6--里程碑式的开始之执行第一个程序wordcount
一.先在HDFS文件系统创建对应的目录,具体如下: 1.待处理文件存放目录 /data/wordcount(之所以创建wordcount,是为了对文件分类,对应本次任务名) 命令:hadoop fs ...