Windows-Server-2008-R2

IIS 的奇怪重寫行為

  • July 11, 2013

我也在Stackoverflow上問過這個問題,但我認為這會是一個更好的地方。

我們在 IIS7.5 上有以下重寫規則:

<rule name="Anything else to the event handler" enabled="true" stopProcessing="true">
 <match url="^(.*)$" />
 <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
   <add input="{PATH_INFO}" pattern="^.*(/index.cfm/).*$" negate="true" />
 </conditions>
 <action type="Rewrite" url="/index.cfm/{R:1}" appendQueryString="true" logRewrittenUrl="true" />
</rule>

但是,它永遠不會將 /{R:1} 放在它之後。它只是轉到/index.cfm。我們需要實際獲取引用變數,因為我們在 ColdFusion (10) 腳本中使用了它。我們想要的範例 url 重寫:

從:http://www.my-site.com/this.is.a.test/another.test

到:http://www.my-site.com/index.cfm/this.is.a.test/another.test

任何人都知道為什麼它不會這樣做?(快速注意:執行正確的 URL 時可能會出現 ColdFusion 錯誤,但我認為這不會導致重寫問題?)

請注意,當您在瀏覽器中嘗試相同的操作(禁用規則)時,它確實有效 - 只是不適用於重寫規則。使用重寫規則,CF 中的 cgi.PATH_INFO 變數返回空字元串。

此外,IIS 確實說它已在日誌中將 URL 重寫為 index.cfm/this.is.a.test/another.test,這很奇怪。使用 301 重定向而不是重寫使其工作得非常好(沒有更改任何有關規則的內容,僅重定向操作類型)。這對我來說非常奇怪,因為我希望重寫與重定向幾乎相同,只是重寫是內部的不同。

我們的伺服器上也有 Helicon Ape,所以如果您在 mod_rewrite 而不是 IIS 模組中有解決方案,請提出建議。

問題是我們昨天應用了新的更新 11 後需要重新做 Coldfusion 10 的配置工具。它現在正在工作。

引用自:https://serverfault.com/questions/522466