首页  ·  知识 ·  云计算
URL重写HTM文件名后出现真实的HTM文件不能访问的解决方案
网友  博客园 http://www.cnblogs.com/ghfsusan/  综合  编辑:dezai   图片来源:网络
一个网站项目改版升级后用 httpModules 重写了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处理,代码如下using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Web;
 using System.IO;
 namespace Aoecn.HttpHandler
 {
     /// <summary>
     ///
     /// </summary>
     public class HtmHandler:   IHttpHandler
     {
 
         #region IHttpHandler 成员
 
         public bool IsReusable
         {
             get { return true; }
         }
 
         public void ProcessRequest(HttpContext context)
         {
 
             string filepath = context.Request.Url.AbsolutePath;
             filepath = filepath.Replace("/","\\");
             filepath = string.Concat(@"d:\web",filepath);
             if (File.Exists(filepath) == false)
             {
                 filepath = @"d:\web\404.html";
             }
             string tempstr;
             using (StreamReader sr = new StreamReader(filepath, Encoding.UTF8))
             {
                 tempstr = sr.ReadToEnd();
             }
 
 
             context.Response.Write(tempstr);
             context.Response.End();
         }
 
         #endregion
     }
 }
 
 

然后修改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也真常显示。

本文作者:网友 来源:博客园 http://www.cnblogs.com/ghfsusan/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读