使用URL Rewrite从asp.net中的子域提供静态内容

时间:2011-02-24 17:39:23

标签: asp.net iis-7 static url-rewriting subdomain

搜索了几个小时但没有用,所以这里......

我有一个域名,每天都会收到很多点击,并且有人问我是否可以提供子域名中的静态内容。由于该网站非常广泛且已经编写,我想知道是否有任何方法可以使用URL重写进行更改:

www.example.com/image.gif

static.example.com/image.gif

我有一个使用301重定向的解决方案,但据我所知,这是适得其反的,因为每个图像必须进行2次请求。我真的不想通过所有的aspx页面和CSS来对新网址进行硬编码,因为它会导致进一步的问题 - 网站的某些部分仍在开发中,静态内容可能随时发生变化。我尝试使用重写(而不是重定向)来更改网址,但它出现了类似的内容:

http://www.example.com/http://static.example.com/image.gif

你将如何实现这一目标?我可以完全访问dns和服务器(win 2008r2 / IIS 7.5),因此如果网址重写不是答案,可以进行任何更改。

提前致谢

汤姆。

1 个答案:

答案 0 :(得分:1)

您可以使用HttpModule完成此操作。以下示例捕获对gif文件的所有请求,并将绝对路径更改为指向承载静态内容的备用站点。在HttpModule中尝试这个方法:

    private void Application_BeginRequest(Object source, EventArgs e)
    {
        // Create HttpApplication and HttpContext objects to access
        // request and response properties.
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        string filePath = context.Request.FilePath;
        string fullPath = context.Request.Url.AbsoluteUri;
        string fileExtension = VirtualPathUtility.GetExtension(filePath);
        if (fileExtension.Equals(".gif"))
        {
            context.Response.ContentType = "image/gif";
            context.Response.Redirect(fullPath.Replace("www.example.com", "static.example.com"));
        }
    }

有关HttpModule的更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms227673.aspx

我测试了上面的代码 - 它有效。我希望这会有所帮助。