簡體   English   中英

將所有請求的URL重寫為ASP.NET 3.5中的文件夾-IIS 7

[英]Rewrite URL for all requests to a folder in ASP.NET 3.5 - IIS 7

我們有許多現有的客戶指向以下網址:

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

謝謝。

不能完全確定這是否可行,但是您可以在舊站點上設置URL路由,以便將所有請求發送到處理程序,並且可以在該處理程序中執行Web請求以從新位置獲取文件。

我使用該過程的一種變體將圖像URL映射到不同的位置,並且我的處理程序執行一些數據庫查詢以獲取映射的關系並提供正確的圖像。 我不明白為什么您可以提出網絡請求以獲取圖像。

由於您使用的是IIS7,因此可以使用內置的URL重寫模塊

您可能希望使用入站和出站規則將\\ images \\ image1.jpg更改為\\ image1.jpg

它可以涉及很多,但這應該很簡單。

假設您可以將處理程序添加到站點(例如在站點的/ bin目錄中添加DLL),並且由於無法發送302響應而限制了性能,那么您可以編寫一個自定義處理程序以獲取所有請求與該URL模式匹配的請求,然后通過Web客戶端代碼從原始網站對sub2.site圖像進行網絡請求,然后將其從原始網站sub1.site.com中提供回來。

有關創建和設置自定義處理程序的基本知識,請參見如何使用Visual C#.NET創建ASP.NET HTTP處理程序。 然后,使用HttpWebRequest發出sub2.site.com的請求,如指南“深入了解ASP.NET頁面中的執行HTTP請求”中所述 加上一些其他代碼來處理錯誤,超時,以盡可能少的處理和內存使用率傳遞圖像等。

根據兩台服務器之間的響應時間/延遲,這可能會很慢,但它可以滿足您的所有要求。 但是,如果將映像移至站點2的目的是出於性能(CPU或內存)或帶寬限制的考慮,那么該解決方案將抵消任何收益-實際上會使情況變得更糟。 但是,如果由於其他業務或技術原因而搬遷,則此解決方案可能仍然有用。

如果您對服務器或服務器上游的任何內容擁有其他控制權,則可以使用mod_proxy(或類似的Windows / IIS工具)來攔截這些URL,並將其轉發到另一台服務器,然后以實際請求進行響應。 根據您的網絡配置和可用服務器,這可能是最簡單,性能最好的解決方案。

可以將IIS配置為將請求轉發到另一個Web服務器嗎? serverfault上的IIS 7.5解決方案具有快速的過程和鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM