httpHandler - 子文件夹问题

Posted

技术标签:

【中文标题】httpHandler - 子文件夹问题【英文标题】:httpHandler - subfolder issue 【发布时间】:2011-02-12 12:11:43 【问题描述】:

我正在尝试将我的旧打字板博客重定向到使用 wordpress 运行的新博客(永久 301 重定向)。新博客也将在新服务器上。

旧博客的结构如下: http://subdomain.domain.com/weblog/year/month/what-ever-article.html

新博客如下所示: http://www.domain.com/Blog/index.php/year/month/what-ever-article.html

我正在使用我在网上找到并尝试使用它的 http 处理程序:

    public class MyHttpModule :IHttpModule 
 


public MyHttpModule() 
     
        // 
        // TODO: Add constructor logic here 
        // 
     
#region IHttpModule Members 

public void Dispose() 
 

 

public void Init(HttpApplication context) 
 
    context.BeginRequest += new EventHandler(context_BeginRequest); 
 

void context_BeginRequest(object sender, EventArgs e) 

    string oldURL = System.Web.HttpContext.Current.Request.Url.ToString();
    string newURL = String.Empty;
    //oldURL = 

    if (oldURL.ToString().ToLower().IndexOf("articles") >= 0 || System.Web.HttpContext.Current.Request.Url.ToString().ToLower().IndexOf("weblog") >= 0)
    
        newURL = oldURL.Replace("subdomain.domain.com/weblog", "www.domain.com/Blog/index.php");
        if (newURL.ToLower().Contains("subdomain"))
        
            newURL = "http://www.domain.com/Blog";
        
    
    else
    
        newURL = "http://www.domain.com/Blog";
    
    System.Web.HttpContext.Current.Response.Clear();
    System.Web.HttpContext.Current.Response.StatusCode = 301;
    System.Web.HttpContext.Current.Response.AddHeader("Location", newURL);
    System.Web.HttpContext.Current.Response.End();
 
#endregion 

为了使用此代码,我将处理程序放入 web.config 中

        <httpModules>
        <add name="MyHttpModule" type="MyHttpModule, App_Code"/>
    </httpModules>

我遇到的问题是,当我想从 http://subdomain.domain.com/weblog/year/month/what-ever-article.html 重定向时,我收到一个错误,指出该文件夹不存在。

有什么方法可以更改我的脚本或将全部捕获添加到将 URL 转发到我的脚本的 web.config 中?

当我在 oldURL 字符串中使用“http://subdomain.domain.com/weblog/year/month/what-ever-article.html”时,重定向工作得很好......所以我一定有一些 IIS 或 web.config 设置错误。

提前致谢, 帕特里克

【问题讨论】:

为此使用 IIS 重写器模块(假设您使用的是 IIS7)不是更好吗? 【参考方案1】:

我认为您需要为 html 页面添加处理程序,以便它们可以在 asp.net 下运行

您可以使用 web.config 上的 httpHandlers 来添加 html,或者使用 iis 通过 asp.net 处理您的 html 或其他文件,并且可以从您的过滤器中传递。

【讨论】:

以上是关于httpHandler - 子文件夹问题的主要内容,如果未能解决你的问题,请参考以下文章

无法将 HttpHandler 映射到“路径/*”通配符映射

jQuery ajax 调用 httphandler 返回 zip 文件

使用默认命名空间的 HttpHandler

HttpHandler与HttpModule及实现文件下载

无会话 HTTPHandler

无法在带有 httpHandler 的页面上显示 .swf 文件