前两天做项目的时候,有地方需要用到静态页面,然后就顺便研究了一下url重写,人理解,url重写就是修改了地址栏的显示,隐藏了真正的跳转。废话不说了,下面是我使用的两种方法
1、在global.asax文件中添加一个void ApplicationBeginRequest(..)方法,在这个方法里面,修改跳转路径。代码如下
void Application_BeginRequest(object sender, EventArgs e)
{
string url = Request.RawUrl;//请求的原始页面
Regex reg = new Regex(@"wangzhangonggao/(d+).html");
Match match = reg.Match(url);
if (match.Success)
{
string id = Regex.Match(url, @"d").Value;
string strPath = "/wangzhangonggao/newsDetail.htm";
HttpContext.Current.RewritePath(strPath);//跳转到真实的页面
}
}
在web.config中要记住在<compilation>下添加<buildProviders>节点,说明文件格式的引用
2、利用UrlRewriter
这个应该是常用的了,最重要的就是web.confg的配置。
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/wangzhangonggao/(d+).html</LookFor>
<SendTo>~/wangzhangonggao/newsDetail.htm</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<appSettings>
<add key="ConnectionString" value="server=localhost;uid=sa;pwd=test;database=SLS_HZC"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0">
<buildProviders>
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider"/>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider"/>
</buildProviders>
</compilation>
<httpHandlers>
<!--这个地方的配置针对的是请求页面的,例如我请求wangzhangonggao/1.html,但实际上页面的内容是在另一个页面中。弄反了会报404的错误-->
<add verb="*" path="wangzhangonggao/*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
</httpHandlers>