IIS 7.5 (Express) applicationhost.config:virtualDirectory 的 physicalPath 可以是相对路径吗?

IIS 7.5 (Express) applicationhost.config:virtualDirectory 的 physicalPath 可以是相对路径吗?

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,经过谷歌搜索后,似乎表示文件路径语法无效。

有什么方法可以解决此错误,以便我可以使用相对物理路径作为我的网站根目录?

答案1

不幸的是不行。这必须是完整的物理路径。只要您不打算经常更改站点路径,静态路径就不是问题。如果您经常将路径更改为不同的站点实例,您可能需要考虑使用 appcmd 编写更改脚本,以便获取所有子文件夹。

答案2

您没有说明如何运行 IIS Express。如果您从命令行运行它,则可以尝试一种解决方法,即创建可在 中使用的环境变量physicalPath

例如如果你有两个文件:运行_在_iisexpress.ps1run_on_iisexpress_applicationhost.config在一个目录中。在运行_在_iisexpress.ps1运行 IIS 的脚本,您可以创建一个具有绝对 URL 的环境变量。

运行_在_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>
...

相关内容