0

我有 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 来做(如果可能的话)。那么,我应该在“其他”块中做什么?

4

3 回答 3

0

在其他情况下,您可以重定向到 $_SERVER['HTTP_REFERER']; 这是重定向到您的推荐人页面。

否则,如果可能更早检查,您可以检查 file_exist 并放置 href 如果文件存在。

于 2013-04-28T13:31:53.123 回答
0

1)您可以输出一个带有错误消息和超时元刷新标记的简单 html。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);
于 2013-04-28T13:49:17.060 回答
0

根据脚本的设置方式,一种可能的解决方案是使用标头重定向。

<?php
header( "LOCATON: /not-found.php" );
die();
?>

这会将用户重定向到您想要的任何页面。正如其他人已经说过的那样,您应该非常小心以这种方式处理文件下载,以防止各种漏洞。在传递给任何获取文件内容的函数之前,我会清理文件名,并将可能的下载目录限制在您绝对需要从中下载的位置。也不要相信 open_basedir 在上述任何情况下都能保护您。

于 2013-04-28T13:40:57.477 回答