託管一個具有多個虛榮路由的應用程序
問題
我們目前有兩個 ASP.NET MVC 項目從帶有 IIS 8.5 的 Windows Server 2012 R2 提供,如下所示:
foo
託管在server.com/foo
bar
託管在server.com/bar
但是,這些項目的程式碼幾乎相同,因此我們正在整合它們。理想情況下,我們會有
common
託管在server.com/common
(僅在內部使用)- IIS 重寫規則
^foo(.*)$
→common{R:1}
所以它似乎託管在server.com/foo
- IIS 重寫規則
^bar(.*)$
→common{R:1}
所以它似乎託管在server.com/bar
我們已經設置了新的通用項目,它在 上執行良好
server.com/common
,但是,當我們啟用重寫規則時,任何試圖導航到server.com/foo
或/bar
將產生 403 錯誤的東西,特別是:故障排除
我很確定這不是我的模式/替換字元串的問題,因為如果我將規則類型更改為
Redirect
,它會生成所需的目標 URL。如果我創建一個 IIS 重寫規則
^common/test(.*)$
→common{R:1}
那麼common
程式碼執行正確,但^common-test(.*)$
→common{R:1}
失敗,所以有一些**東西阻止common
從./common
這裡令人困惑的是,還有另一個應用程序與共享應用程序做類似的事情
/baz
並被/qux
重寫為/other
. 如果我指向^foo(.*)$
→other{R:1}
它工作正常(當然,它執行錯誤的應用程式碼)。我無法確定這兩個應用程序之間會導致這種情況的任何其他相關差異。事實上,我複制了幾乎所有Web.config
文件other
,但仍然看到相同的行為。我還用盡了這些其他潛在的解決方案:
- IIS URL 重寫:403 - 禁止:訪問被拒絕- 要求 SSL 在站點範圍內被禁用;我們在入口處處理 SSL。此外,對於所有這些應用程序,我們只使用匿名身份驗證。
- 無法從 .Net 4.5 網站獲得除 403 之外的任何內容- 我啟用了此選項,但沒有看到任何變化。
還有什麼可能導致這種情況?我會很感激任何指示。
在深入探勘並再次與背後的開發人員協商之後
other
,我認為我們已經解決了這個問題。基本上,站點託管
server.com
及其下將參與重寫的所有應用程序(common
以及直到我們準備好刪除它們)都需要在同一個 IIS 應用程序池中執行。foo``bar
我已經調整了我們的部署過程來解決這個問題。我們使用 Octopus,所以歸結為在每個項目中只更改一個變數。對於未來的讀者,您的過程可能會有所不同,但以防萬一,希望這對其他人有所幫助: