这可能看起来是一个奇怪的请求,但我正在试图将用户从特定的页面重定向,并设置
我正在尝试使用以下脚本进行重定向:
并制作脚本:
我在这里找到了一个解决重定向问题的方案,但错误通知没有显示:如何从 PHP 脚本发送 500 内部服务器错误 以下是基于上述选定答案的代码:
希望只是因为它最初没有读取
注意:我也知道我可以使用
注意:我知道我的重定向方法并不是保护包含敏感信息页面的最安全方法,但我正在重定向的页面只是一般页面,我不希望普通公众能够查看。
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
能够检测到错误并执行错误文档处理。
这是我的.htaccess
:
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>
最后是我的错误处理脚本在index.php
上:
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');
我在这里找到了一个解决重定向问题的方案,但错误通知没有显示:如何从 PHP 脚本发送 500 内部服务器错误 以下是基于上述选定答案的代码:
// 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");
}
}
虽然能够重定向,但是无法显示通知,因此我改变了错误文档的顶部部分:
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
? - Barmar403 Forbidden
而不是401 Unauthorized
。 - Jesse Elser