【问题标题】:Serving static content from a subdomain in asp.net using URL Rewrite使用 URL 重写从 asp.net 中的子域提供静态内容
【发布时间】:2011-02-24 17:39:22
【问题描述】:

搜索了几个小时无济于事,所以这里......

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

www.example.com/image.gif

static.example.com/image.gif

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

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

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

提前致谢

汤姆。

【问题讨论】:

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


【解决方案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

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

【讨论】:

  • 非常感谢,尽管一张图片以文本/html 的形式提供服务,但请求现在已正确重定向!?这种方法不会每张图片产生 2 个请求,并且看起来像发送 302 吗?
  • 我昨天注意到它为原始图像请求提供 302 响应,为重定向文件提供 200 响应(我在重定向位置设置了一个演示文件,因此为 200)。这应该没问题,除非你出于某种原因想避免它。我不确定 text/html 问题。那张图片和其他图片有什么明显的区别吗?
  • Tom,您应该可以明确设置内容类型。请参阅上面的答案 - 我在 if 块中添加了一行。
  • 另一件事:有一个更好的解决方案来更改在上面的 fullPath 字符串上使用 Replace() 的域。如果今天晚些时候有机会,我会用更理想的解决方案更新代码。
  • 是的,我想出了一个关于内容类型的类似解决方案,不,图像没有什么不同!一定只是那些奇怪的错误之一。事实证明,在这种情况下不使用静态域实际上更快。也许 302 和 response.replace 的组合胜过任何潜在的速度提升。在我将此标记为已回答之前,我是否应该等待另一个解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2015-11-16
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多