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를 추가하고 이 디렉터리에 대한 익명 인증을 허용하는 것입니다. 결국 오류 페이지만 있습니다.