IIS 7.5 (Express) applicationhost.config: Может ли физический путь virtualDirectory быть относительным путем?
Я настраиваю сайт в 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, похоже, указывает на неверный синтаксис пути к файлу.
Есть ли способ обойти эту ошибку, чтобы я мог использовать относительный физический путь для корня моего сайта?
2 ответа
К сожалению нет. Это должен быть полный физический путь. Пока вы не планируете часто менять путь к сайту, статический путь не должен быть проблемой. Если вы часто меняете путь к другим экземплярам сайта, возможно, вы захотите использовать appcmd для сценария изменения, чтобы он получал все подпапки.
Вы не говорите, как запускаете IIS Express. Если вы запустите его из командной строки, вы можете попробовать обходной путь с созданием переменной среды, которую вы можете использовать вphysicalPath
.
Например, если у вас есть два файла: run_on_iisexpress.ps1 и run_on_iisexpress_applicationhost.config в одном каталоге. В сценарии run_on_iisexpress.ps1 , который запускает IIS, вы можете создать переменную среды с абсолютным 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>
...