使用 IIS 自定义错误页面时出现空白页

使用 IIS 自定义错误页面时出现空白页

我在 Windows Server 2012 下的 IIS8 上运行基于 PHP 的应用程序。我尝试使用自定义错误页面来处理失败的身份验证尝试 - 通过替换 401 错误页面。

这是我的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpRedirect enabled="false" destination="https://my.website.co.uk" />
        <rewrite>
            <rules>
                <rule name="Hide Yii Index" stopProcessing="true">
                    <match url="." />
                    <action type="Rewrite" url="index.php" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>
<httpErrors errorMode="Custom" existingResponse="Replace">
       <remove statusCode="401" subStatusCode="-1" />
       <error statusCode="401" path="/errors/401.htm" responseMode="ExecuteURL" />
</httpErrors>
    </system.webServer>
</configuration>

当我尝试在不提供凭证的情况下查看网站时,看到的只是一个空白页。页面的源代码也是完全空白的 - 没有任何一个 html 标签。

有什么想法我可以如何实现它吗?

答案1

想想你在这里做什么。你说如果用户没有正确通过身份验证,就向用户显示另一个页面。但是这个 (401) 页面只能显示给经过身份验证的用户。因此 IIS 不允许向用户显示该页面,而是显示一个空白页。

至少有两种方法可以解决这个问题,将 httpErrors 更改为:

<httpErrors errorMode="Custom" existingResponse="Replace">
   <remove statusCode="401" subStatusCode="-1" />
   <error statusCode="401" path="errors\401.htm" responseMode="File" />
</httpErrors>

通过将 responseMode 更改为File,iis 不再执行 URL,而是加载文件内容并将其发送给用户。无论身份验证状态如何,这始终有效。路径相对于网站的根目录。

另一个选择是将 web.config 添加到您的错误文件夹并允许对该目录进行匿名身份验证,毕竟它只有错误页面。

相关内容