如果用户访问存在但我不希望他/她看到的页面,我想显示 404 错误。
我不想进行重定向(这会导致地址栏在地址栏中显示错误页面的链接),如下所示:
if ($this_page_should_not_be_seen)
header("Location: err.php?e=404");
相反,如果浏览器地址中的 URL 没有更改,看起来该页面确实不存在。
如果用户访问存在但我不希望他/她看到的页面,我想显示 404 错误。
我不想进行重定向(这会导致地址栏在地址栏中显示错误页面的链接),如下所示:
if ($this_page_should_not_be_seen)
header("Location: err.php?e=404");
相反,如果浏览器地址中的 URL 没有更改,看起来该页面确实不存在。
在当前页面中包含错误页面并发送 404 错误状态代码:
<?php
if ($nobody_should_ever_be_here) {
header('HTTP/1.1 404 Not Found'); //This may be put inside err.php instead
$_GET['e'] = 404; //Set the variable for the error code (you cannot have a
// querystring in an include directive).
include 'err.php';
exit; //Do not do any more work in this script.
}
?>
请注意,如果该页面永远不可见,则应使用此选项。未经授权的访问(如果某些登录用户应该看到该页面)的更好状态代码是 403(未授权)。
您可以通过编程方式实现 404(或任何其他 HTTP 响应代码)
header('HTTP/1.0 404 Not Found');
die;
根据我的经验,在不更改 URL 的情况下显示 404 错误文档的最佳方法是在 apaches.htaccess
文件中定义错误文档:
RewriteEngine on
RewriteBase /
# Defines 404 error pages content:
ErrorDocument 404 /my_root/errors/404.html
# for all invalid links (non existing files):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* - [L,R=404]
# for some valid links (existing files to be un-accessible):
RewriteCond %{THE_REQUEST} ^.*some_file.php.*$ [NC]
RewriteRule .* - [L,R=404]
你写的让我们很难理解。
如果他/她到达我不希望他/她到达的页面,我想将任何传入用户重定向到 404 错误页面。
那么,一个人到达一个存在的页面?
例如,如果此人访问了他/她不应该看到的受保护页面。使用标头是最好的方法。您的选择是回显元刷新或 javascript,但标题更清晰。你可以展示一些You do not have permission to do that!
在网络上很常见的东西。如果您不想重定向,可以通过标题显示 404“假消息”。
如果您正在谈论某人到达 404 页面,一个不存在的文件,您唯一的选择是使用 .htaccess
您可以直接访问您的 404 页面吗?
header('位置:http ://www.website.com/errors/404.php ');
对于单个页面,这些都是重定向到 404 错误的绝佳答案。 这是一个解决方案,可让您测试条件并重定向站点上的任何脚本。
编写一个.htaccess
文件,使用重写规则,并使用[QSA,NC,L]
来维护页面位置和标题 post/get 参数......
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,NC,L]
这将导致每个页面都重定向到./index.php
(如果您已经在使用,请随意重命名index.php
)。URL 不会更改。然后,在 中index.php
,检查一些条件,如果通过,则包含$_SERVER
指示脚本的变量,否则,执行自定义 404。这意味着您可以简单地控制异常处理index.php
...
$someNon404Condition = file_exists($_SERVER['PHP_SELF']);
if ($someNon404Condition) {
include($_SERVER['PHP_SELF']); // do the stuff
} else {
print("404! Why are you trying to access " . $_SERVER['PHP_SELF'] . "?");
}
这也可以让你做很多其他的事情!忘记静态 404.html 页面,使用动态页面,您可以...
explode('/', $_SERVER['PHP_SELF'])
,然后在标题“也许这就是您要找的东西?”下显示这些匹配结果的列表。