通过 localhost/folder 访问另一台服务器上的 IIS 虚拟目录时出现运行时错误
Runtime Error while Accessing IIS virtual directory on another server through localhost/folder
我们有2台服务器,在server1中,IIS配置有一个虚拟目录,里面有URL的HTML页面。
在server2中,IIS配置虚拟目录指向server1中的目录(与server1中配置的目录相同)。
在服务器 1 中通过本地主机访问 URL 时显示配置文件中提到的一般错误,而在服务器 2 中通过本地主机访问 URL 时显示运行时错误(如下所述),尽管它指出与服务器 1 指向的相同配置。服务器之间没有访问问题。
“/”应用程序中的服务器错误
运行时错误:
说明:处理您的请求时发生异常。此外,在为第一个异常执行自定义错误页面时发生另一个异常。请求已终止。
网络配置:-
<customErrors defaultredirect="GeneralErrorPage.htm" mode ="On">
<error statuscode="404" redirect="GeneralErrorPage.htm"/>
</customErrors>
- 设置
<customErrors mode="Off" />
和
- 在 server1 中托管 url 作为 http://localhost/buyer/ 显示一般错误
- 在 server2 中托管 url 作为 http://localhost/buyer/ 显示运行时错误
- IIS 中的虚拟目录购买者有很多 *.html 页
在服务器 1 和服务器 2 中托管 url 作为 http://localhost/buyer/info.html 显示
UI买家信息页面
很明显,server2 在访问 server1 中的目录“buyer”时没有问题。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="403" subStatusCode="-1" />
<error statusCode="403" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="ExecuteURL" />
<error statusCode="404" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="Redirect" />
</httpErrors>
<directoryBrowse enabled="false" />
</system.webServer>
<system.web>
<customErrors defaultRedirect="GeneralErrorPage.htm" mode="Off">
<error statusCode="404" redirect="GeneralErrorPage.htm"/>
</customErrors>
</system.web>
</configuration>
注:
手动 当我将 html 页面 (GeneralErr.htm) 添加到同一个 url http://localhost/subtest/GeneralErr.htm 时,页面加载成功。
但是在从服务器 2 托管 url http://localhost/subtest 时出现以下错误 - 获取访问错误或运行时错误
配置错误
说明:处理此请求所需的配置文件时发生错误。请查看下面的具体错误详细信息并适当修改您的配置文件。
解析器错误消息:加载配置文件时出错:无法开始监视对“\server1\c$\test\subtest”的更改,因为访问被拒绝.
关于虚拟目录的 IIS 配置
使用 IIS8 版本
在 Server1 文件夹结构中:c:\test\subtest
在 Server2 中: 虚拟目录“subtest”的 IIS 配置
物理路径: \server1\c$\test\subtest
物理路径凭证: domain\username
虚拟路径: /subtest
你一开始得到的500.19错误就像错误描述说不允许绝对路径,应该使用相对路径一样。所以可以设置相对路径来解决这个问题,或者在applicationhost中开启绝对路径,按照下划线部分配置。
<httpErrors allowAbsolutePathsWhenDelegated="true" errorMode="Custom" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
...
</httpErrors>
即使开启了相对路径,通过localhsot/subtest访问还是会出现问题。
有两种方法可以解决这个问题,一种是将应用程序池修改为“无托管代码”和“经典”设置。另一种是修改应用程序池的身份,将其设置为用户与管理员权限相同,可创建一个用户或直接使用管理员。
我们有2台服务器,在server1中,IIS配置有一个虚拟目录,里面有URL的HTML页面。
在server2中,IIS配置虚拟目录指向server1中的目录(与server1中配置的目录相同)。
在服务器 1 中通过本地主机访问 URL 时显示配置文件中提到的一般错误,而在服务器 2 中通过本地主机访问 URL 时显示运行时错误(如下所述),尽管它指出与服务器 1 指向的相同配置。服务器之间没有访问问题。
“/”应用程序中的服务器错误
运行时错误:
说明:处理您的请求时发生异常。此外,在为第一个异常执行自定义错误页面时发生另一个异常。请求已终止。
网络配置:-
<customErrors defaultredirect="GeneralErrorPage.htm" mode ="On">
<error statuscode="404" redirect="GeneralErrorPage.htm"/>
</customErrors>
- 设置
<customErrors mode="Off" />
和
- 在 server1 中托管 url 作为 http://localhost/buyer/ 显示一般错误
- 在 server2 中托管 url 作为 http://localhost/buyer/ 显示运行时错误
- IIS 中的虚拟目录购买者有很多 *.html 页 在服务器 1 和服务器 2 中托管 url 作为 http://localhost/buyer/info.html 显示 UI买家信息页面
很明显,server2 在访问 server1 中的目录“buyer”时没有问题。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="403" subStatusCode="-1" />
<error statusCode="403" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="ExecuteURL" />
<error statusCode="404" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="Redirect" />
</httpErrors>
<directoryBrowse enabled="false" />
</system.webServer>
<system.web>
<customErrors defaultRedirect="GeneralErrorPage.htm" mode="Off">
<error statusCode="404" redirect="GeneralErrorPage.htm"/>
</customErrors>
</system.web>
</configuration>
注: 手动 当我将 html 页面 (GeneralErr.htm) 添加到同一个 url http://localhost/subtest/GeneralErr.htm 时,页面加载成功。
但是在从服务器 2 托管 url http://localhost/subtest 时出现以下错误 - 获取访问错误或运行时错误
配置错误 说明:处理此请求所需的配置文件时发生错误。请查看下面的具体错误详细信息并适当修改您的配置文件。
解析器错误消息:加载配置文件时出错:无法开始监视对“\server1\c$\test\subtest”的更改,因为访问被拒绝.
关于虚拟目录的 IIS 配置 使用 IIS8 版本
在 Server1 文件夹结构中:c:\test\subtest
在 Server2 中: 虚拟目录“subtest”的 IIS 配置 物理路径: \server1\c$\test\subtest 物理路径凭证: domain\username 虚拟路径: /subtest
你一开始得到的500.19错误就像错误描述说不允许绝对路径,应该使用相对路径一样。所以可以设置相对路径来解决这个问题,或者在applicationhost中开启绝对路径,按照下划线部分配置。
<httpErrors allowAbsolutePathsWhenDelegated="true" errorMode="Custom" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
...
</httpErrors>
即使开启了相对路径,通过localhsot/subtest访问还是会出现问题。
有两种方法可以解决这个问题,一种是将应用程序池修改为“无托管代码”和“经典”设置。另一种是修改应用程序池的身份,将其设置为用户与管理员权限相同,可创建一个用户或直接使用管理员。