在ASP.NET 3.5 - IIS 7中重写对文件夹的所有请求的URL

时间:2012-08-29 17:50:57

标签: asp.net url-rewriting

我们有许多现有客户端指向以下网址:

  

http://sub1.site.com/images/image1.jpg

/ images是一个虚拟目录,指向该服务器上实际包含image1.jpg的目录。

我们正在将所有文件移出此目录并转移到不会运行同一应用程序的单独服务器上。

该文件现在仅在以下位置提供:

  

http://sub2.site.com/image1.jpg

让客户要求的最佳方式是什么? http://sub1.site.com/images/image1.jpg会获得现在位于http://sub2.site.com/image1.jpg的内容吗?

一些要求:

  • 我们需要通过该网址返回实际内容 - 而不是302响应。
  • 我们无法修改IIS服务器配置 - 只能修改站点的web.config
  • 再次,我们正在运行asp.net 3.5

感谢。

4 个答案:

答案 0 :(得分:1)

不完全确定这会有效,但您可以在旧网站上设置URL路由,以便将所有请求发送到处理程序,并在该处理程序中,您可以执行Web请求以从其新位置获取文件。

我使用该过程的变体将图像URL映射到不同的位置,我的处理程序执行一些数据库查询以获取映射的关系并提供正确的图像。我不明白为什么你可以做网页请求来获取图像。

答案 1 :(得分:0)

由于您使用的是IIS7,因此可以使用内置的URL rewrite module

您希望入站和出站规则将\ images \ image1.jpg更改为\ image1.jpg

它可以非常复杂,但这应该很简单。

答案 2 :(得分:0)

假设您可以向站点添加处理程序(如向站点中的/ bin目录添加DLL),并且限制为您无法发送302响应以获得更好的性能,那么您也可以编写自定义处理程序要获取与该URL模式匹配的所有请求,请通过Web客户端代码从原始站点执行sub2.site映像的Web请求,然后将其从原始站点sub1.site.com提供回来。

有关创建和设置自定义处理程序的基础知识,请参阅How To Create an ASP.NET HTTP Handler by Using Visual C# .NET。然后使用HttpWebRequest发出sub2.site.com的请求,如指南A Deeper Look at Performing HTTP Requests in an ASP.NET Page中所示。还有一些其他代码可以处理错误,超时,通过尽可能少的处理和内存使用来传递图像等。

根据两台服务器之间的响应时间/延迟,这可能会很慢,但它可以满足您的所有要求。但是,如果将图像移动到站点2的目的在于性能(CPU或内存)或带宽限制,那么这种解决方案将使任何收益无效 - 并且实际上会使事情变得更糟。但是,如果他们因其他业务或技术原因而被移动,那么这个解决方案可能仍然有用。

答案 3 :(得分:0)

如果您对服务器或服务器上游的任何其他控制权,您可以使用mod_proxy(或类似的Windows / IIS工具)拦截这些URL并将它们转发到另一台服务器并回复实际请求。根据您的网络配置和可用服务器,这可能是最简单,性能最佳的解决方案。

serverfault上的

Can IIS be configure to forward request to another web server?具有IIS 7.5解决方案的快速过程和链接。