2011-10-11 124 views
4

我被困通過簡單的出站規則,我要修改HTTP 內容類型應用/原子+ XML,如果URL完全相符http://wayneye.com/Feeds/Atom在IIS URL自定義HTTP頭部重寫模塊

我的規則XML:

<outboundRules> 
<rule name="AtomFeedsIMEType" patternSyntax="ExactMatch"> 
    <match serverVariable="RESPONSE_CONTENT_TYPE" pattern="http://{HTTP_HOST}/Feeds/Atom" /> 
    <action type="Rewrite" value="application/atom+xml" /> 
</rule> 

需要幫助...

回答

5

您正在根據完整URL匹配服務器變量,包括域名。這不會起作用;-)。 Content-Type的價值無關緊要,無論如何你都會替換它,所以你可以匹配任何東西。爲了確保不會在每個頁面上都替換它,您需要添加一個前提條件,以僅匹配以/ Feeds/Atom開頭的請求(在{REQUEST_URI}上)。這裏有一個例子:

<outboundRules> 
    <rule name="AtomFeedsIMEType" preCondition="Match atom feeds"> 
    <match serverVariable="RESPONSE_Content_Type" pattern="(.*)" negate="false" /> 
    <action type="Rewrite" value="application/atom+xml" replace="true" /> 
    </rule> 
    <preConditions> 
    <preCondition name="Match atom feeds"> 
     <add input="{REQUEST_URI}" pattern="^/Feeds/Atom" /> 
    </preCondition> 
    </preConditions> 
</outboundRules> 

爲了這個工作,服務器必須被設置爲允許改變Content-Type頭。這可以在服務器級別或站點級別完成,但需要由管理員完成。它在applicationHost.config中設置,而不是在web.config中設置。這裏是的applicationHost.config的一部分,允許對:

<location path="your_site_name"> 
    <system.webServer> 
    <rewrite> 
     <allowedServerVariables> 
     <add name="CONTENT_TYPE" /> 
     </allowedServerVariables> 
    </rewrite> 
    </system.webServer> 
</location> 

您還可以允許這個從GUI,以查看服務器變量下從主屏幕URLRewrite行動聯繫起來。希望這可以幫助。

+0

非常感謝你的詳細解釋! –

+0

但是,我仍然有問題!每個:http://learn.iis.net/page.aspx/570/application-request-routing-version-2-overview/ HTTP_CONTENT_TYPE已被更改爲RESPONSE_CONTENT_TYPE,無論我使用什麼,它都不起作用(即內容類型不會更改)!實際上,我的開發環境請求URI是:http://localhost/WayneBlog.Web/Feeds/Atom,模式「^/Feeds/Atom」是否正確?請指導 –

+0

是的,您必須使用RESPONSE_CONTENT_TYPE來替換Content-Type HTTP標頭是正確的。這就是我在我的例子中所做的。如果您的請求URI不同,您必須在前提條件下更改該模式。例如。 pattern =「/ WayneBlog.Web/Feeds/Atom」,或者如果您希望開發環境與實際環境兼容,可以使用pattern =「/ Feeds/Atom $」來匹配任何以/ Feed/Atom結尾的URL。 –