我有main.php文件,我有很多“子页面”(有标签,你可以切换它们,因此http://mydomain.com/main.php地址不会改变)。我通过ajax请求动态地接收它们。在其中一个“子页面”我有下载链接。例如
<a href="dwnl.php?file=fish.avi">fish</a>
在dwnl.php文件中我有类似的东西
// . . . . .
$file =basename($_GET['file']);
if(file_exists($file))
{
// download file
}
else exit;
我的问题发生在文件不存在时(即在我的dwnl.php文件的'else'块中)。如果用户单击此类链接,浏览器会将其重定向到http://mydomain.com/dwnl.php?file= ...地址。我怎么能禁止这种重定向?我想用PHP(如果有可能)这样做。那么,我应该在'else'块中做什么?
答案 0 :(得分:0)
在其他地方你可以重定向到$ _SERVER ['HTTP_REFERER']; 这将重定向到您的referer页面。
如果可能的话,请先检查一下 如果文件存在,你可以检查file_exist并放置href。
答案 1 :(得分:0)
根据脚本的设置方式,一种可能的解决方案是使用标头重定向。
<?php
header( "LOCATON: /not-found.php" );
die();
?>
这会将用户重定向到您想要的任何页面。正如其他人已经说过的那样,你应该非常小心以这种方式处理文件下载以防止各种漏洞利用。我会在传入任何获取文件内容的函数之前清理文件名,并将可能的下载目录限制为您绝对需要下载的位置。在上述任何情况下,也不要相信open_basedir可以保护您。
答案 2 :(得分:0)
1)您可以输出一个简单的html,其中包含错误消息和带有时间的meta refresh标记。
5秒后重定向到http://example.com/:
<meta http-equiv="refresh" content="5;URL='http://example.com/'">
2)您可以使用header()立即重定向而不发送任何消息:
header("Location: http://site.com/page?var=123");
3)您可以设置错误 404 文件:
header('HTTP/1.0 404 Not Found', true, 404);