2013-01-10 94 views
7

我正在嘗試爲以下方案編寫重寫規則。在web.config中將子文件夾重寫爲子域

用戶嘗試加載這樣的畫面:

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的答案,選項的工作...

UPDATE2:雖然cheesemacfly無法幫助我在我的特殊情況下,我爲他頒發了獎金和標誌着他的答案,作爲接受的一個,因爲他竭盡全力幫助我聊天。希望他的回答能幫助那些在IIS上重寫的人。

+0

模式'^/images/stories/catalog/(.*)$'與您的輸入'domain.com/images/folder/picture.jpg'不匹配。這是一個錯字嗎?你想要做的是將任何請求像'domain.com/images/folder/*'重定向到'cdn.domain.com/images/folder/*'保留請求的文件名/路徑,對嗎? – cheesemacfly

+0

這是一個錯字。以上更正。是的,你對重寫是正確的。我正在用我的cdn使用origin-pull – GregD

+0

對不起,我無法幫到你更多...我很樂意看到解決方案,如果你找到它! – cheesemacfly

回答

5

編輯:

爲了能夠重寫(而不是隻重定向)的網址外部網站,您需要安裝Application Request Routing module並啓用代理模式。

要做到這一點:

  1. Download and install the module
  2. 打開IIS管理控制檯(inetmgr
  3. 選擇服務器節點
  4. Application Request Routing Cache雙擊:在 ARR
  5. 點擊Server Proxy SettingsActions窗格(屏幕右側)
  6. 勾選Enable proxy並點擊Apply proxy

第二步是建立一個規則。

如果你希望你的重寫是基於路徑上,然後使用下面的代碼:

<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重寫 - >創建空白規則 - >點擊測試模式: Pattern test

如果你沒有得到預期的結果,你可以使用Failed Request Tracing tool

調試重寫0
+0

您的變體無法奏效。當我使用它們中的任何一個時,它「打破」圖片。當我查看源代碼時,因爲其中一些來自Joomla,所以圖片具有src =「/ images/folder/picture.jpg」作爲例子。 – GregD

+0

你讓我失去了一點......你有一個Joomla網站使用託管在你的IIS7上的圖片?這個Joomla網站在哪裏託管? – cheesemacfly

+0

它是IIS 7上的Joomla安裝 – GregD

0

注意:將規則更改爲重定向而不是重寫會修復問題。理想情況下,你希望它是一個重定向,但我花了很多時間試圖讓重寫工作,到目前爲止還沒有解決方案。

<rule name="Rewrite to images.cdn.com" enabled="true" stopProcessing="true"> 
<match url="images/(.+)$" ignoreCase="true" /> 
<action type="Redirect" url="http://images.cdn.com/{R:1}" /> 
</rule>