Iis

託管一個具有多個虛榮路由的應用程序

  • June 6, 2019

問題

我們目前有兩個 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 錯誤的東西,特別是:

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,但仍然看到相同的行為。

我還用盡了這些其他潛在的解決方案:

還有什麼可能導致這種情況?我會很感激任何指示。

在深入探勘並再次與背後的開發人員協商之後other,我認為我們已經解決了這個問題。

基本上,站點託管server.com及其下將參與重寫的所有應用程序(common以及直到我們準備好刪除它們)都需要在同一個 IIS 應用程序池中執行。foo``bar

我已經調整了我們的部署過程來解決這個問題。我們使用 Octopus,所以歸結為在每個項目中只更改一個變數。對於未來的讀者,您的過程可能會有所不同,但以防萬一,希望這對其他人有所幫助:

項目變數

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