Configuration

IIS 7.5 (Express) applicationhost.config:虛擬目錄的物理路徑可以是相對路徑嗎?

  • May 10, 2021

我正在applicationhost.config為 IIS 7.5 Express 配置一個站點:

<site name="default" id="1" serverAutoStart="true">
   <application path="/">
       <virtualDirectory path="/" physicalPath="%IIS_BIN%\..\Somewhere\Else" />
                                           <!-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -->
   </application>
   ...
</site>

我發現如圖所示指定相對路徑似乎不起作用,並且會導致 HTTP 500.19 Internal Server Error。IIS 進一步報告錯誤程式碼0x8007007b,經過一番Google搜尋後,似乎表明文件路徑語法無效。

有什麼辦法可以解決這個錯誤,以便我可以為我的站點根目錄使用相對物理路徑?

很不幸的是,不行。那一定是一條完整的物理路徑。只要您不打算經常更改站點路徑,靜態路徑就不是問題。如果您經常將路徑更改為不同的站點實例,您可能需要考慮使用 appcmd 編寫更改腳本,以便獲取所有子文件夾。

你沒有說你如何執行 IIS Express。如果您從命令行執行它,那麼您可以嘗試使用創建和環境變數的解決方法,您可以在physicalPath.

例如,如果您有兩個文件:run_on_iisexpress.ps1run_on_iisexpress_applicationhost.config在一個目錄中。在執行 IIS 的run_on_iisexpress.ps1腳本中,您可以使用絕對 url 創建環境變數。

run_on_iisexpress.ps1

$applicationhostConfig = "$PSScriptRoot\run_on_iisexpress_applicationhost.config"
$env:MY_WEBSITE_PATH = $PSScriptRoot; #or any other logic to generate absolute path from relative path (Resolve-Path command is usefull here)
&"C:\Program Files\IIS Express\iisexpress.exe" /config:"$applicationhostConfig" /site:"MyWebsite" /apppool:"Clr4IntegratedAppPool"

run_on_iisexpress_applicationhost.config

...
<site name="MyWebsite" id="2">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
       <virtualDirectory path="/" physicalPath="%MY_WEBSITE_PATH%" />
   </application>
   <bindings>
       <binding protocol="http" bindingInformation="*:60001:localhost" />
   </bindings>
</site>
...

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