이것은 이상한 요청처럼 보일 수 있지만 특정 페이지 집합에서 사용자를 리디렉션하고 403
헤더를 설정하여 내 오류 처리기가 해당 헤더를 표시하도록합니다. 필요한 통지. 내 리디렉션 스크립트가 사용자를 리디렉션하지 않습니다. 나는이 두 줄을 제거하면PHP 리디렉션 사용자 및 403 헤더 설정
// Redirect users from sensative pages
if(!isset($_SESSION['logged_in']) || isset($_SESSION['logged_in']) && $_SESSION['logged_in'] !== "admin") {
$redirect[] = array();
$redirect[] = "uploadImg.php";
if (in_array(basename($_SERVER["SCRIPT_FILENAME"]), $redirect)) {
header('HTTP/1.1 403 FORBIDDEN');
header('Status: 403 You Do Not Have Access To This Page');
header("Location: index.php");
}
}
그러나 이상하게도 :
header('HTTP/1.1 403 FORBIDDEN');
header('Status: 403 You Do Not Have Access To This Page');
를하고 스크립트합니다
// Redirect users from sensative pages
if(!isset($_SESSION['logged_in']) || isset($_SESSION['logged_in']) && $_SESSION['logged_in'] !== "admin") {
$redirect[] = array();
$redirect[] = "uploadImg.php";
if (in_array(basename($_SERVER["SCRIPT_FILENAME"]), $redirect)) {
header("Location: index.php");
}
}
을 나는이 스크립트를 사용하여 리디렉션을 시도하고있어
사용자를 다시 index.php
페이지로 리디렉션합니다.
특별히 .htaccess
이 오류를 처리하고 오류 문서 처리를 수행하도록 헤더를 설정하려고합니다. index.php
에
ErrorDocument 400 /index.php?err=400
ErrorDocument 401 /index.php?err=401
ErrorDocument 403 /index.php?err=403
ErrorDocument 404 /index.php?err=404
ErrorDocument 500 /index.php?err=500
ErrorDocument 502 /index.php?err=502
ErrorDocument 504 /index.php?err=504
Options -MultiViews
RewriteEngine On
RewriteBase/
RewriteRule ^h/(\d+)/w/(\d+)/a/([a-z]+)/thumb/(.+)$ /gallery/thumb.php?h=$1&w=$2&a=$3&src=$4 [L]
RewriteRule ^h/(\d+)/w/(\d+)/a/([a-z]+)/watermark/(.+)$ /gallery/watermark.php?h=$1&w=$2&a=$3&src=$4 [L]
<FilesMatch ".(jpg|png|gif|jpeg)$">
ErrorDocument 404 error.png
</FilesMatch>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin http://example.com
Header set Access-Control-Allow-Credentials true
</IfModule>
그리고 마지막으로 내 오류 처리기 스크립트 :
이
내.htaccess
은이 두 라인이 작동 내 리디렉션 스크립트를 중지 이유
if(isset($_GET['err'])) {
$error_status = $_GET['err'];
switch ($error_status) {
case 400:
echo '<div class="alert alert-danger alert-top" role="alert">' . PHP_EOL;
echo '<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>' . PHP_EOL;
echo '<strong>400 Bad Request:</strong> There was an error with your request.' . PHP_EOL;
echo '</div>' . PHP_EOL;
break;
case 401:
echo '<div class="alert alert-danger alert-top" role="alert">' . PHP_EOL;
echo '<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>' . PHP_EOL;
echo '<strong>401 UNAUTHORIZED:</strong> You are not authorized to view this page or directory.' . PHP_EOL;
echo '</div>' . PHP_EOL;
break;
case 403:
echo '<div class="alert alert-danger alert-top" role="alert">' . PHP_EOL;
echo '<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>' . PHP_EOL;
echo '<strong>403 FORBIDDEN:</strong> You do not have access to this file or directory.' . PHP_EOL;
echo '</div>' . PHP_EOL;
break;
case 404:
echo '<div class="alert alert-danger alert-top" role="alert">' . PHP_EOL;
echo '<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>' . PHP_EOL;
echo '<strong>404 Error:</strong> The page you are looking for does not exist.' . PHP_EOL;
echo '</div>' . PHP_EOL;
break;
case 500:
echo '<div class="alert alert-danger alert-top" role="alert">' . PHP_EOL;
echo '<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>' . PHP_EOL;
echo '<strong>500 Internal Server Error:</strong> The server encountered an error. Please try again.' . PHP_EOL;
echo '</div>' . PHP_EOL;
break;
case 502:
echo '<div class="alert alert-danger alert-top" role="alert">' . PHP_EOL;
echo '<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>' . PHP_EOL;
echo '<strong>502 Bad Gateway:</strong> The server received an invalid response.' . PHP_EOL;
echo '</div>' . PHP_EOL;
break;
case 504:
echo '<div class="alert alert-danger alert-top" role="alert">' . PHP_EOL;
echo '<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>' . PHP_EOL;
echo '<strong>504 Gateway Timeout:</strong> The server is taking too long to respond.' . PHP_EOL;
echo '</div>' . PHP_EOL;
break;
}
}
더 또는 덜 궁금하네요 :
header('HTTP/1.1 403 FORBIDDEN');
header('Status: 403 You Do Not Have Access To This Page');
해결책을 찾았습니다. 전자 리디렉션을 해결하지만, 오류 알림이 표시되지 않습니다 : How to send 500 Internal Server Error error from a PHP script
코드를 위에서 선택한 답변 기반으로 :
// Redirect users from sensative pages
if(!isset($_SESSION['logged_in']) || isset($_SESSION['logged_in']) && $_SESSION['logged_in'] !== "admin") {
$redirect[] = array();
$redirect[] = "uploadImg.php";
if (in_array(basename($_SERVER["SCRIPT_FILENAME"]), $redirect)) {
header($_SERVER['SERVER_PROTOCOL'] . ' 403 FORBIDDEN', true, 403);
header("Location: index.php");
}
}
기타 시도합니다을 나는 또한 시도에 다음을 변경했습니다 내 원하는 얻을에 영향을
내가 시도 @Parrot의 제안으로 :
// Redirect users from sensative pages
if(!isset($_SESSION['logged_in']) || isset($_SESSION['logged_in']) && $_SESSION['logged_in'] !== "admin") {
$redirect[] = array();
$redirect[] = "uploadImg.php";
if (in_array(basename($_SERVER["SCRIPT_FILENAME"]), $redirect)) {
http_response_code(403);
header("Location: index.php");
}
}
W 이 재 했더라도 HICH 그래서 이것은 내 오류 문서의 상단 부분을 변경하는 나에게 동기를 부여 알림을 보여주기 위해 작동하지 않았다 :
if(isset($_GET['err'])) {
$error_status = $_GET['err'];
}
else {
$error_status = http_response_code();
}
을 희망 그냥 원래 http_response_code();
를 읽고되지 않았 음.
참고 : 또한 그냥 header("Location: index.php?err=403");
그러나 나는 주소 표시 줄에 오류 코드를 표시하지 않으 않을 수 있다는 것을 알고 있습니다.
참고 : 참고 : 리디렉션 방식은 중요한 정보가있는 페이지를 보호하기에 가장 안전하지 않지만, 리디렉션하는 페이지는 일반 사용자가 볼 수없는 일반 페이지 일뿐입니다.
당신이'403' 또는'503'을 원하십니까 더 아무것도 필요하지 않습니다 생각? – Barmar
@Barmar'403 Forbidden '또는'401 Unauthorized'하지만'403'을 목표로하고 있습니다. –
질문에 "503 헤더를 설정하십시오" – Barmar