IIS 7.5、2008rc2、经典 asp、500 错误消息:
由于发生内部服务器错误,无法显示该页面。
我需要知道如何配置 IIS 以获得更详细的错误。
我尝试将 ASP 配置中的所有调试选项设置为 true。
但这没有用。谁能帮我?
IIS 7.5、2008rc2、经典 asp、500 错误消息:
由于发生内部服务器错误,无法显示该页面。
我需要知道如何配置 IIS 以获得更详细的错误。
我尝试将 ASP 配置中的所有调试选项设置为 true。
但这没有用。谁能帮我?
我遇到了同样的问题,并以与 Alex K 相同的方式解决了问题。
因此,如果“将错误发送到浏览器”也不起作用,则设置如下:
错误页面 -> 500 -> 编辑功能设置 -> “详细错误”
另请注意,如果返回的错误页面的内容很短并且您使用的是 IE,IE 会很乐意忽略服务器返回的有用内容,而是向您显示它自己的通用错误页面。您可以在 IE 的选项中将其关闭,或使用其他浏览器。
如果你在远程服务器上,你可以像这样配置你的 web.config 文件:
<configuration>
<system.webServer>
<httpErrors errorMode="Detailed" />
<asp scriptErrorSentToBrowser="true"/>
</system.webServer>
<system.web>
<customErrors mode="Off"/>
<compilation debug="true"/>
</system.web>
在 IIS admin 中双击站点主屏幕中的“ASP”,展开“调试属性”,启用“将错误发送到浏览器”,然后单击“应用”。
在主屏幕上的“错误页面”下选择“500”,然后选择“编辑功能设置”并选择“详细错误”。
请注意,相同的步骤适用于 IIS 8.0 (Windows Server 2012)。
在web.config下
<system.webServer>
替换(或添加)该行
<httpErrors errorMode="Detailed"></httpErrors>
和
<httpErrors existingResponse="PassThrough" errorMode="Detailed"></httpErrors>
这是因为默认情况下 IIS7 会截获 HTTP 状态代码,例如由应用程序生成的 4xx 和 5xx 进一步向上管道。
接下来,在“ASP”部分下启用“将错误发送到浏览器”,在“错误页面/编辑功能设置”下,选择“详细错误”。
此外,将网站文件夹的写入权限授予IIS_IUSRS内置组。
TLDR:首先确定您从管道中的哪个位置获取错误(滚动查找与您的错误相似的内容的屏幕截图),进行更改以获取新内容,然后重复。
如果您看到位于此处的文件...
%SystemDrive%\inetpub\custerr<语言标签>\500.htm
...通常看起来像这样:
**...那么您知道您在IIS中看到当前配置的错误页面** 并且您不需要更改 ASP.net customErrors 设置、asp 错误详细信息设置或“显示友好的 http 错误”浏览器设置。
您可能想查看上面引用的路径,而不是相信我的屏幕截图,以防万一有人更改它。
在这种情况下,您会看到 < httpErrors > 的设置或在 IIS 管理器中的错误页面--> 编辑功能设置。在服务器节点级别(与站点级别相反)默认为 errorMode=DetailedLocalOnly,这意味着虽然您将在远程看到此配置的错误页面,但您应该能够在本地登录到服务器并查看完整应该看起来像这样的错误:
此时您应该拥有修复当前错误所需的一切。
这留下了几种可能性。
将您网站的httpErrors更改为“详细”,以便您可以远程查看。但如果它不起作用,您的错误可能已经是配置错误,请参阅上面的#3。因此,您可能会被#4 或#5 卡住,并且您将需要服务器团队中的某个人。
......你希望看到这样的东西......
...然后您需要在 IIS 管理器中的站点 --> IIS --> ASP --> 调试属性下将“向浏览器发送错误”更改为 true
或这个...
...您需要在浏览器中禁用友好错误或使用 fiddler 的 webview 查看实际响应与浏览器选择显示的内容。
如果你看到这个...
...然后自定义错误正在工作,但您没有自定义错误页面(当然此时谈论的是 .net 而不是经典的 asp)。您需要将 web.config 中的 customErrors 标记更改为 RemoteOnly 以在服务器上查看,或 Off 以远程查看。
如果您看到样式与您的网站类似的内容,则自定义错误可能是 On 或 RemoteOnly 并且它正在显示自定义页面(例如 MVC 中的 Views->Shared->Error.cshtml)。也就是说,不太可能但有可能有人将 IIS 中的页面更改为 httpErrors,因此请参阅第一部分。
尝试将“existingResponse”httpErrors 属性的值设置为“PassThrough”。我的设置为“替换”,这导致 YSOD 不显示。
<httpErrors errorMode="Detailed" existingResponse="PassThrough">
没有人提到的一件事是非常快速和临时的修复,您可以在该 Web 服务器的本地主机上查看错误。
您还可以验证,如果您将主网站文件夹 ( ) 更改为另一个文件夹,您必须向新文件夹中的IIS_IUSRS 组c:\inetpub\wwwroot
授予读取权限。
对于已经尝试了所有方法但无法显示错误详细信息的人,像我一样,检查不同级别的配置是个好主意。我在网站级别和应用程序级别(网站内部)都有一个配置文件,两者都检查。此外,事实证明,我在 IIS 的最高节点上禁用了详细错误(就在起始页下方,它的名称与网络服务器计算机名相同)。检查那里的错误页面。
找到了。
以管理员身份运行 cmd,进入 system32\inetsrv 文件夹并执行:
appcmd.exe set config -section:system.webServer/httpErrors -allowAbsolutePathsWhenDelegated:true
现在我可以看到详细的 asp 错误了。
如果您在服务器中运行浏览器并使用本地 ip 测试您的项目 url,您将收到该项目的所有错误,而没有一般错误页面(例如 500 错误页面)。
仔细检查您正在测试的 asp 文件的编码。
例如,如果您在 Windows Server Core 2019 上创建了如下文件:
echo "<%@ LANGUAGE=Javascript %>" > test.asp
echo "<%Response.Write("test");%>" >> test.asp
然后 test.asp 将被编码为 Unicode,请求它会产生一个 500 没有任何细节。
做一个notepad test.asp
,然后点击“另存为...”并选择“ANSI”编码来修复它。
就我而言,这是权限问题。打开应用程序文件夹属性 -> 安全选项卡 -> 编辑 -> 添加