zoukankan      html  css  js  c++  java
  • 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也真常显示。

  • 相关阅读:
    [Go] 写文件和判断文件是否存在
    [日常] 解决github速度特别慢
    [Go] imap收信非并发
    [Linux] 使用secureCRT实现SSH隧道服务器端口转发到本机内网穿透
    [Linux] 解决nginx: [emerg] directive "rewrite" is not terminated by ";"
    [MySQL] 解决Error 1698: Access denied for user 'root'@'localhost'
    [Go] gocron源码阅读-判断是否使用root用户执行
    [日常] 前端资源测试机上忽略版本号的的nginx配置
    [Go] 使用go mod安装beego
    [Go] tcp服务下的数据传递
  • 原文地址:https://www.cnblogs.com/ghfsusan/p/1623458.html
Copyright © 2011-2022 走看看