URL重写的问题 .NET
因为有个项目要用到URL重写,于是在网上搜一搜,发现网上说的很不清楚。 终于弄了一个网上,终于搞出来了。
1、在项目里的Bin文件下添加URLRewriter.dll
下载地址 download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi 安装以后找到URLRewriter.dll 放到BIN下
2、在WebConfig中配置添加如下代码
1 <configuration> 2 <configSections> 3 <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 4 </configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />表示名为RewriterConfig的类在存在于bin目录下的URLRewriter .dll文件中。
3、在System.Web下添加一下节点
1 <httpHandlers> 2 <add verb="*" path="*.whtml" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 3 </httpHandlers>
这里的意思就是把请求后缀为 .Whtml的web页面的http请求都给URLRewriter.RewriterFactoryHandler, URLRewriter 来处理。
注意这里path不要是.aspx, 否则会出现404错误的, 我开始没注意这个问题,可害惨我了。
4、URL重写
<RewriterConfig> <Rules> <!--productlist.aspx?ptype=23--> <RewriterRule> <LookFor>~/newslist-(\d+)\.whtml</LookFor> //这里是请求匹配 就是浏览器里的 .html 或者 .whtml网址 <SendTo>~/newslist.aspx?ntype=$1</SendTo> // 这里是真实的请求aspx 地址, 就是项目中.aspx页面地址 </RewriterRule> // $1表示匹配的参数 <RewriterRule> <LookFor>~/recruitdetails-(\d+)\.whtml</LookFor> <SendTo>~/recruitdetails.aspx?recid=$1</SendTo> </RewriterRule> <RewriterRule> <LookFor>~/productdetails-(\d+)-(\d+)\.whtml</LookFor> <SendTo> <![CDATA[productdetails.aspx?productid=$1&ptype=$2]]></SendTo> //这里是传递 两个参数 </RewriterRule> <RewriterRule> <LookFor>~/caselist-(\d+)\.whtml</LookFor> <SendTo>~/caselist.aspx?casetype=$1</SendTo> </RewriterRule> <RewriterRule> <LookFor>~/casedetails-(\d+)-(\d+)\.whtml</LookFor> <SendTo> <![CDATA[casedetails.aspx?caseid=$1&casetype=$2]]></SendTo> </RewriterRule> <RewriterRule> <LookFor>~/(.+)\.whtml</LookFor> <SendTo>~/$1.aspx</SendTo> </RewriterRule> </Rules> </RewriterConfig>
5、添加以下节点,就是为了把请求为.whtml的都由 IsapiModule来处理。
<system.webServer> <defaultDocument> <files> <add value="index.aspx" /> </files> </defaultDocument> <handlers> <add name="ww32" path="*.whtml" verb="GET,POST" modules="IsapiModule" scriptProcessor="C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> </handlers> </system.webServer>
这样就大功告成,就可以了。
浏览器地址发送http://localhost:8056/about-1.whtml http 请求,经过实际处理以后
地址就转换成 http://localhost:8056/about.aspx?id=1
6、如果页面有分页控件的话还要处理一下
在原来你下载的项目里找到 ActionlessForm.dll 放到你的项目 bin 目录下。
然后在你的这个页面中加入:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
再把你的<Form>改为:
<skm:Form id="你的表单名" method="post" runat="server">
</skm:Form>