一、使用URL重写的优点:
1、满足搜索引擎的要求。某些搜索引擎不能支持动态页面的抓取,大量的信息就不能被用户搜索到。因此把网站地址改成静态的绝对地址是很有必要的。
2、隐藏技术实现。 有些网站挂着.asp、.jsp开发语言的标记,让人一眼就看出使用什么语言开发的。使用URL重写技术就可以实现地址的隐藏。提高安全性。
3、更加友好的地址,让用户能很好的记住。
二、使用URL重写的缺点:
1、性能有所损耗。
2、处理图片路径或者是CSS路径等,会比较麻烦。
比如:http://www.Test.com/Word和http://www.Test.com/Word.html都是通过url重写定位到同一个页面http://www.Test.com/Word/One.aspx ,都是用同样的处理程序,唯一不同的是为了处理http://www.Test.com/Word这样没有扩展名的地址他必须将*.*映射到aspnet_isapi.dll,而http://www.Test.com/Word.html则是将*.html映射到aspnet_isapi.dll,结果发现http://www.Test.com/Word.html的性能比http://www.Test.com/Word好十至二十倍,因为*.*就是该页面所有的请求,包括css文件和所有的图片文件都有用他写的url重写处理程序去处理,*.html则没有,只是一个请求,问题就出现在这里了,如果http://www.wodecity.com/food这个页面图片很多的话,请求一个页面要同时用url重写处理程序去处理那么多图片,能不慢吗?当然是有处理的方法的。方法1,把存放图片所在的文件夹转化成一个虚拟目录,在然后移处该虚拟目录*.*的映射,这样一来他的url重写程序就不会去处理图片文件,当然存放别的不需要url重写程序的文件也要象图片文件夹做类似的处理,方法2,新建一个站点,如用http://img.wodecity.com/存放图片文件,原理是一样的,都是让你的url重写处理程序不处理那些图片文件。
三、使用URL的方法:
1、下载安装MSDNURLRewriting.msi。
开源代码http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi,下载下来后编译一下就可以了。编译后得到URLRewriter.dll和ActionlessForm.dll两个Dll。
2、在ASP.NET项目的web.config中配置使用。
在<configuration>下面添加一段代码:
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
在<system.web>下面添加一段代码:
<httpHandlers>
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
在<system.web>下面添加一段代码:
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/index.html</LookFor>
<SendTo>~/Index.aspx</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(/d+)-(.*).html</LookFor>
<SendTo>~/Products/ProductsList.aspx?id=$1&SelectValue=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(/d+)/(.*).html</LookFor>
<SendTo>~/Products/ProductsDetails.aspx?ID=$1&CASNO=$2</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
其中LookFor是地址栏显示的地址,SendTo是真实的反问地址。当页面带有多个参数的时候,如第一个用$1来表示,第二个用$2来表示,以此类推,而参数于参数中的链接符由"&"改为"&"。LookFor中的(/d+)这些就是正则表达式的写法了。
在页面中的链接也就要修改了,比如<a href="products/productsList.aspx?id=111&SelectValue=a">产品列表</a>就需要修改为<a href="111-a.html">产品列表</a>。
四、回发处理
1、将ActionlessForm.dll添加到项目的bin文件夹。
2、在aspx网页的代码中加<%@ Register TagPrefix="RW" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
3、然后将form标签改为RW:Form(注意开始和结束都要改),TagPrefix可以自定义
4.打开IIS中的文件的属性==》虚拟目录==》配置==》添加。在可执行文件中输入:C:/WINDOWS/Microsoft.NET/Framework/v1.1.432/aspnet_isapi.dll;在扩展名输入*.Html;将确认文件是否存在去掉,点击确定。
五、静态页面调用。
在反问真正的html文件时,避免找不到文件报错,比如:要反问Link.html这个文件时,链接为www.test.com/Link.html,会出现没有为扩展名“.html”注册的生成提供程序。可以在 machine.config 或 web.config 中的 <compilation><buildProviders> 节注册一个。请确保所注册的提供程序具有包含值“Web”或“All”的 BuildProviderAppliesToAttribute 属性
这个错误。
在这个里面处理一下就可以了
<compilation defaultLanguage="c#" debug="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
<!-- 加上此节点,保证原本就是.html类型的文件能正常访问 -->
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>