Asp.net

在 web.config 中將子文件夾重寫為子域

  • February 24, 2017

我正在嘗試為以下場景編寫重寫規則。

使用者嘗試載入此圖片:

domain.com/images/folder/picture.jpg

相反,我需要它來載入:

cdn.domain.com/images/folder/picture.jpg.

這是我所擁有的不起作用的:

<rule name="CDN rewrite for Images">
   <match url="(.*)" />
   <conditions>
       <add input="{HTTP_HOST}" pattern="domain.com" />
       <add input="{REQUEST_URI}" pattern="^/images/folder/(.*)$" />
   </conditions>
   <action type="Rewrite" url="cdn.domain.com/images/folder/{C:1}" />
</rule>

更新: 添加附加資訊。大多數圖片都是從 Joomla 提供的,因此雖然域的根目錄類似於 domain.com,但大多數圖片都是使用 src="/images/folder/picture.jpg" 輸入的,不太清楚這對重寫有何影響,但是下面cheesemacfly的答案中沒有一個選項有效……

更新 2: 雖然 cheesemacfly 在我的特定情況下無法幫助我,但我授予他賞金並將他的答案標記為已接受,因為他在聊天中竭盡全力幫助我。希望他的回答能幫助那些在 IIS 上重寫的人。

編輯:

為了能夠將 URL 重寫(而不僅僅是重定向)到外部網站,您需要安裝應用程序請求路由模組並啟用代理模式。

為此:

  1. 下載並安裝模組
  2. 打開 IIS 管理控制台 ( inetmgr)
  3. 選擇您的伺服器節點
  4. 點兩下Application Request Routing CacheARR
  5. 點擊窗格(螢幕右側Server Proxy SettingsActions
  6. 選中該框Enable proxy並點擊Apply 代理人

第二步是關於設置你的規則。

如果您希望重寫基於路徑,請使用以下程式碼:

<rewrite>
 <rules>
   <rule name="Rewrite to cdn domain">
     <match url="^images/folder/(.+)$" />
     <action type="Rewrite" url="http://cdn.domain.com/images/folder/{R:1}" />
   </rule>
  </rules>
</rewrite>

或者,如果您在第二個網站上保留相同的文件夾架構,您可以簡化如下:

<rewrite>
 <rules>
   <rule name="Rewrite to cdn domain">
     <match url="^images/folder/(.+)$" />
     <action type="Rewrite" url="http://cdn.domain.com/{R:0}" />
   </rule>
  </rules>
</rewrite>

如果您只想擷取以特定副檔名結尾的文件(比如說圖像):

<rewrite>
 <rules>
   <rule name="Forward to cdn domain">
     <match url="^images/folder/.+\.(?:jpg|bmp|gif)$" />
     <action type="Rewrite" url="http://cdn.domain.com/{R:0}" />
   </rule>
 </rules>
</rewrite>

請參考:http ://www.iis.net/learn/extensions/url-rewrite-module/iis-url-rewriting-and-aspnet-routing (“您應該使用哪個選項? ”部分)

小費:

測試模式的最佳方法是使用 IIS 測試模式工具。

在您網站的根目錄 -> URL 重寫 -> 創建空白規則 -> 點擊測試模式: 模式測試

如果您沒有得到預期的結果,您可以使用Failed Request Tracing 工具調試您的重寫

引用自:https://stackoverflow.com/questions/14269149