`

UrlRewrite、地址映射技术(传说中的"IIS的URL重写")

 
阅读更多

UrlRewrite有什么用处?
1、满足搜索引擎的要求
某些搜索引擎不能支持动态页面的抓取,大量的信息就不能被潜在用户搜索到。用UrlRewrite技术你可以把 http://server/news.asp?id=111 变成 http://server/news/111.htm 这样他们就会被搜索引擎收录了。google虽然可以抓取动态页面,但是google对动态页面的评分一般低于静态页面。所以,对大量信息发布的网站,把 网站地址改变成静态的绝对是值得的。
2、隐藏技术实现,提高网站的移植性
每个页面都挂着鲜明的.asp/.jsp这种开发语言的标记,可以一眼让人看出你的网站使用什么语言做的。而且在改变网站的语言的时候,你需要改动大量的 链接。而且,一个页面修改了扩展名,他的pagerank也会随之消失,从头开始。我们可以用UrlRewrite技术隐藏我们的实现细节,这样修改移植 都很方便,而且完全不损失pagerank。
3、满足美感的要求
对于追求完美主义的网站设计师,即使是网页的地址也要看起来简洁明快。形如 http://server/news.asp?channel=3&id=111 的网页地址,肯定是上不了完美主义者的法眼的,用UrlRewrite技术,你可以把他变成 http://server/news/3/111.htm 。

1.下载ISAPI_Rewrite.ISAPI_Rewrite分精简(Lite)和完全(Full)版.精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理.不过对于有服务器的朋友,精简版也就够啦.精简版下载地址:http://www.helicontech.com/download/ ,就是
ISAPI_Rewrite 3 Lite Freeware!
read on specific limitations
(也可以自己选择合适的了)

2.安装.msi的文件,和装一般程序一样装就可以了,俺装在D:/Program Files/Helicon/ISAPI_Rewrite3/ .
3.接下来一步比较重要哦。打开Internet 信息服务,右键web站点属性,点ISAPI筛选器选项卡.添加筛选器,名称自己填,路径自己指定ISAPI_Rewrite.dll,然后确定。 (这里如果iis是6.0且ISAPI_Rewrite是 高版本的话安装的时候软件会自动添加上去,并且还会在web站点属性里添加一个ISAPI_Rewrite选项卡。而低版本的要手动添加了)(哈哈我的是高版本的
4.来测试一下.新建一个test.asp,里面写上
<%=request.querystring("info")%>
效果就是执行的时候test.asp?info=自己手动输入的内容(页面会得到并显示)
5.这一步很重要哦,开始添加rewrite规则(即RewriteRule)
打开Internet 信息服务,右键web站点属性,点ISAPI_Rewrite 选项卡, 打开编辑(Edit).将下面代码复制上去保存
(我们要把test.asp?info=hello映射成为test-hello.html这样的类型),
RewriteRule /test-([0-9,a-z]*).html /test.asp/?info =$1
点击应用然后保存
6.到浏览器里查看一下效果吧.输入http://localhost/test.asp?info=hellohttp://localhost/test-hello.html ,显示的内容是不是都是hello ?这就证明成功啦!(如果不行可以重启iis再试下)

注:这种方式我修改服务器的配置(没有自己的服务器就没办法了),下面推荐一种新的方法(用代码实现)!
方法二:使用HttpModule实现URL重写
利用ASP.NET提供的HttpContext.RewritePath方法。这个方法允许开发人员动态地重写收到的URL的处理路径,然后让ASP.NET使用刚重写过后的路径来继续执行请求。 譬如,我们可以选择向大众呈示下列URL:
http://www.store.com/products/Books.aspx
http://www.store.com/products/DVDs.aspx
http://www.store.com/products/CDs.aspx

在外界看来,网站上有三个单独的网页(对搜索爬虫而言,这看上去很棒)。通过使用 HttpContext的RewritePath方法,我们可以在这些请求刚进入服务器时,动态地把收到的URL重写成单个Products.aspx网 页接受一个查询字符串的类别名称或者PathInfo参数。譬如,我们可以使用Global.asax中的 Application_BeginRequest事件,来这么做:
void Application_BeginRequest( object sender, EventArgs e) {

string fullOrigionalpath = Request.Url.ToString() ;

if (fullOrigionalpath.Contains( "/Products/Books.aspx" )) {
Context.RewritePath( "/Products.aspx?Category=Books" ) ;
}
else if (fullOrigionalpath.Contains( "/Products/DVDs.aspx" )) {
Context.RewritePath( "/Products.aspx?Category=DVDs" ) ;
}
}

手工编写象上面这样的编码的坏处是,很枯燥乏味,而且容易犯错。我建议你别自己写,而是使用网上现成的HttpModule来完成这项工作。这有几个你现在就可以下载和使用的免费的HttpModule:
UrlRewriter.net
UrlRewriting.net
这些模块允许你用声明的方式在你应用的web.config文件里表达匹配规则。譬如,在你应用的web.config文件里使用 UrlRewriter.Net模块来把上面的那些URL映射到单个Products.aspx页上,我们只要把这个web.config文件添加到我们 的应用里去就可以了(不用任何编码):


<?xml version="1.0"?>

<configuration>

<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>

<system.web>

<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>

</system.web>

<rewriter>
<rewrite url="~/products/books.aspx" to="~/products.aspx?category=books" />
<rewrite url="~/products/CDs.aspx" to="~/products.aspx?category=CDs" />
<rewrite url="~/products/DVDs.aspx" to="~/products.aspx?category=DVDs" />
</rewriter>

</configuration>

上面的HttpModule URL重写模块还支持正则表达式和URL模式匹配(以避免你在web.config 文件里硬写每个URL)。所以,不用写死类别名称,你可以象下面这样重写匹配规则,把类别名称动态地从任何/products/[类别].aspx组合的 URL里取出来:


<rewriter>
<rewrite COLOR: red">aspx" to="~/products.aspx?category=$1" />
</rewriter>


这使得你的编码极其干净,并且扩展性非常之好。

样例下载

注意:(1)一些图片、css路径要注意
(2)上传到服务器时不要忘了上传web.config
(3)如果要重写html,这个要在IIS里配置一下就是把处理的html文件,转交到asp.net来处理!

分享到:
评论

相关推荐

    UrlReWrite(Url重写或伪静态)完美示例源码

    UrlReWrite(Url重写或伪静态)完美示例源码,已利用ActionlessForm解决原始地址form回传的问题 例如:/products.aspx?category=books 转换为/products/Books.aspx或/products/Books.html(需要在IIS中建立映射)...

    IIS10 ISAPI_Rewrite3 IIS10重写工具.rar

    软件介绍: IIS7-IIS10网站配置重写工具ISAPI_Rewrite3 urlrewrite2.exe,功能是将url地址转换成简单的web地址,并且支持内容的重写,以及映射,可重定向伪静态。

    URL重写(UrlReWrite)

    URL重写技术在今天已不是什么新鲜的话题了,在Apache服务器提供了名为mod_rewrite的URL重写模块,而在IIS服务器上,也有很多商业的ISAPI 筛选器模块可供使用。然而这对于我们,没有很多的资金或使用的共享服务器,...

    iis-urlrewrite-generator:转换源 + 目标 URL 的 CSV 并生成 IIS UrlRewrite 映射以放置在 web.config 中

    转换源 + 目标 URL 的 CSV 并生成 IIS UrlRewrite 映射以放置在 web.config 中。 先决条件 信息系统 IIS UrlRewrite 模块 2.0 使用重定向映射的已配置重写规则 生成重写映射 控制台应用程序接受两个参数:CSV 文件...

    一键安装PHP,MYSQL,ZEND,PHPMYadmin FTP服务器ServU 一键安装URLRewrite组件

    三、一键安装URLRewrite组件。 勿需任何设置即可使您的服务器支持shopex,discuz,phpwind,ecshop,dvbbs,uchome等等 常用应用程序的伪静态重写规则。 四、自动设置服务器权限。 即使是新手,通过集成包中的目录安全...

    一键安装PHP,MYSQL,ZEND,PHPMYadmin FTP服务器ServU 一键安装URLRewrite组件 第一部分

    三、一键安装URLRewrite组件。 勿需任何设置即可使您的服务器支持shopex,discuz,phpwind,ecshop,dvbbs,uchome等等 常用应用程序的伪静态重写规则。 四、自动设置服务器权限。 即使是新手,通过集成包中的目录安全...

    在ASP.NET中重写URL的代码

    这个博客帖子概述了几个方法,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自己的需求组织你的URL的结构。 为什么URL映射和重写很重要? 下面是开发人员想要对URL有更大的灵活性的最常见的场景: 1) ...

    快站cms v1.1.0.rar

    rewrite.config为url重写的配置文件 需要在iis设置“isapi映射”来实现伪静态 如果是虚拟主机或者不支持该功能,可以使用rewite2.config的配置 详情参考http://kzcms.com/AnZhuangShiYong/22.html   【后台...

    西部数码Web环境集成安装包 v2.0

    三、一键安装URLRewrite组件。 勿需任何设置即可使您的服务器支持shopex,discuz,phpwind,ecshop,dvbbs,uchome等等常用应用程序的伪静态重写规则。四、自动设置服务器权限。 即使是新手,通过集成包中的目录安全...

    快站cms网站系统源码 v1.0.2

    rewrite.config为url重写的配置文件 需要在iis设置“isapi映射”来实现伪静态 如果是虚拟主机或者不支持该功能,可以使用rewite2.config的配置 详情参考http://kzcms.com/AnZhuangShiYong/22.html 【后台登录】 ...

Global site tag (gtag.js) - Google Analytics