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也真常显示。

  • 相关阅读:
    [node] 如何安装node.js环境(ubuntu16.04)
    [go] 如何安装go环境(ubuntu16.04)
    github如何从提交代码到远程
    angular6 表单验证
    angular6 使用tooltip
    angular6 导出Excel文件
    angular6 页面加载数据时的loading提示
    angular6 使用daterangepicker的注意事项
    angular6 监听url查询参数变化刷新页面
    python使用gevent实现协程
  • 原文地址:https://www.cnblogs.com/ghfsusan/p/1623458.html
Copyright © 2011-2022 走看看