URL重写HTM文件名后出现真实的HTM文件不能访问的解决方案

一个网站项目改版升级后用 httpModules 重写了URL,重写的名称是.htm 但部署时发现,网站上现有真实存在的.HTM文件确无法访问了。服务器环境是windows 2003 IIS6 。到GOOGLE上搜索一下找到如下解决办法。

在web.config文件中加入

1、在<compilation debug="true"> 节点加入

 <buildProviders>
        <add extension=".htm" type="System.Web.Compilation.PageBuildProvider"/>
  </buildProviders>

 

2、在 <httpHandlers> 节点加入

<add verb="GET,POST" path="*.htm" type="System.Web.UI.PageHandlerFactory" validate="false"/>

这样修改后真实的.HTM页面是能显示了,但速度很慢,打开一个真实的.HTM页面都要3秒以上的时间。在到GOOGLE上搜了一圈,也没有找到答案。

本人就拿死马当活马医,自己继承了IHttpHandler 实现了一个HttpHandler处理,代码如下

 

代码
 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Text;
 5  using  System.Web;
 6  using  System.IO;
 7  namespace  Aoecn.HttpHandler
 8  {
 9       ///   <summary>
10       ///  
11       ///   </summary>
12       public   class  HtmHandler:   IHttpHandler
13      {
14 
15           #region  IHttpHandler 成员
16 
17           public   bool  IsReusable
18          {
19               get  {  return   true ; }
20          }
21 
22           public   void  ProcessRequest(HttpContext context)
23          {
24 
25               string  filepath  =  context.Request.Url.AbsolutePath;
26              filepath  =  filepath.Replace( " / " , " \\ " );
27              filepath  =   string .Concat( @" d:\web " ,filepath);
28               if  (File.Exists(filepath)  ==   false )
29              {
30                  filepath  =   @"d :\web\404.html " ;
31              }
32               string  tempstr;
33               using  (StreamReader sr  =   new  StreamReader(filepath, Encoding.UTF8))
34              {
35                  tempstr  =  sr.ReadToEnd();
36              }
37 
38 
39              context.Response.Write(tempstr);
40              context.Response.End();
41          }
42 
43           #endregion
44      }
45  }
46 

 

然后修改web.config文件,把原来的 <add verb="GET,POST" path="*.htm" type="System.Web.UI.PageHandlerFactory" validate="false"/>

换成

<add verb="GET,POST" path="*.htm" type="Aoecn.HttpHandler.HtmHandler,Aoecn.HttpHandler" validate="false"/>

自己的HttpHandler就是把URL请求转换成服务器文件路径,然后在读取出来输出。没有想到的是速度相当的快。打开页面基本没有等待。而且重写部分的htm也真常显示。

你可能感兴趣的:(url重写)