if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
为什么不这样做?我得到一个空白页。
答案 0 :(得分:306)
您的代码在技术上是正确的。如果您查看该空白页面的标题,您将看到404标题,其他计算机/程序将能够正确识别未找到文件的响应。
当然,您的用户仍然是SOL。通常,404s由Web服务器处理。
问题是,一旦Web服务器开始处理PHP页面,它已经通过它将处理404的点
除了提供404标头之外,PHP现在负责输出实际的404页面。
答案 1 :(得分:78)
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>";
echo "The page that you have requested could not be found.";
exit();
}
如果您查看最后两条回音线,那么您将看到内容。您可以根据需要自定义它。
答案 2 :(得分:74)
这是正确的行为,由您来创建404页面的内容。
蜘蛛和下载管理器使用404标头来确定文件是否存在
(带有404标题的页面不会被谷歌或其他搜索引擎索引)
普通用户不会查看http-header并将该页面用作普通页面。
答案 3 :(得分:16)
对于记录,这是全案例处理程序:
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->
答案 4 :(得分:14)
加载默认服务器404页面,如果您有一个页面,例如为apache定义:
if(strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
readfile('404missing.html');
exit();
}
答案 5 :(得分:13)
自PHP 5.4起,您现在可以http_response_code(404);
答案 6 :(得分:4)
另一种解决方案,基于@ Kitet's。
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
//If you don't know which web page is in use, use any page that doesn't exists
$handle = curl_init('http://'. $_SERVER["HTTP_HOST"] .'/404missing.html');
curl_exec($handle);
如果您正在编程托管在服务器中的网站,而您无法控制,则您将不知道哪个文件是“404missing.html”。但是你仍然可以这样做。
通过这种方式,您在同一台服务器上提供了与正常404页面完全相同的结果。观察者将无法区分现有PHP页面返回404和不存在的页面。
答案 7 :(得分:4)
尝试:
header("Status: 404 Not Found");
header('HTTP/1.0 404 Not Found');
再见!
答案 8 :(得分:2)
有点短版本。抑制奇数回声。
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
exit("<h1>404 Not Found</h1>\nThe page that you have requested could not be found.");
}
答案 9 :(得分:2)
if($_SERVER['PHP_SELF'] == '/index.php'){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>";
echo "The page that you have requested could not be found.";
die;
}
永远不会简化echo语句,永远不要忘记上面的半冒号,也为什么在页面上运行一个substr,我们可以轻松地运行php_self
答案 10 :(得分:1)
如果您希望显示服务器的默认错误页面,则必须在服务器中处理此问题。
答案 11 :(得分:1)
你做得对,虽然它可以使用一些提炼。看起来已经解决了,所以让我们谈谈实际应用的好处:
我们这个拥有大量多语言技术文档的旧网站在if else条件下执行此操作:
if (<no file found>){
die("NO FILE HERE");
}
问题(除了无用的消息和糟糕的用户体验)是我们通常使用链接爬虫(在我们的例子中是完整性)来检查错误的链接和丢失的文档。这意味着我们得到了一个完全正确的200没有错误响应,告诉我们那里有一个文件。诚信不知道我们期待PDF,所以我们不得不手动添加404标头与PHP。通过在die上面添加你的代码(因为之后没有任何东西会执行,并且标题应始终在任何渲染的html之前),完整性(其行为或多或少类似于浏览器)将返回404并且我们将确切地知道在哪里寻找丢失文件。有更优雅的方式告诉用户存在错误,但是通过提供404错误,您不仅通知浏览器和类似浏览器的程序错误,而且(如果我错了,我相信 - 纠正我)也是在服务器日志中记录这些错误,您可以轻松地查找404s。
header('HTTP/1.0 404 Not Found');
die("NO FILE HERE");
答案 12 :(得分:1)
试试这个:
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
echo "<head><title>404 Not Found</title></head>";
echo "<h1>Not Found</h1>";
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
echo "<p>The requested URL ".$uri." was not found on this server.</p>";
exit();
}
答案 13 :(得分:0)
你知道,在我的网站上我创建了这样的东西:
$uri=$_SERVER['REQUEST_URI'];
$strpos=strpos($uri, '.php');
if ($strpos!==false){
$e404="The page requested by you: "".$_SERVER['REQUEST_URI']."", doesn't exists on this server.";
$maybe=str_replace('.php','',$uri);
$maybe=str_replace('/','',$maybe);
die("<center><h1>404</h1><hr><h3>$e404</h3><h3>Maybe try <a href=$maybe>www.leaveyortexthere.p.ht/$maybe</a>?</center>");
}
我希望它可以帮到你。
答案 14 :(得分:-4)
我遇到了这个问题..我认为重定向到服务器上的非现有链接可能会成功!因为服务器会返回他的404:
header('Redirect abbb.404.nonexist');
&lt;那肯定不存在
答案 15 :(得分:-17)
如果要显示服务器的默认404页面,可以将其加载到如下框架中:
echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';