您正在根據完整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行動聯繫起來。希望這可以幫助。
非常感謝你的詳細解釋! –
但是,我仍然有問題!每個: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」是否正確?請指導 –
是的,您必須使用RESPONSE_CONTENT_TYPE來替換Content-Type HTTP標頭是正確的。這就是我在我的例子中所做的。如果您的請求URI不同,您必須在前提條件下更改該模式。例如。 pattern =「/ WayneBlog.Web/Feeds/Atom」,或者如果您希望開發環境與實際環境兼容,可以使用pattern =「/ Feeds/Atom $」來匹配任何以/ Feed/Atom結尾的URL。 –