本质上,我正在做的是使用 .htaccess 中的 ErrorDocument 拦截 404,并将其指向 getFile.php。getFile 然后从 url 中获取文件名并在 mysql 数据库中搜索它,获取数据并应用适当的标题。
在我的开发环境(在 ubuntu 下运行的最新 LAMP 服务器)中,一切似乎都运行良好,但是该站点托管在 GoDaddy 上,并且返回的标头似乎存在一些问题。我认为 GoDaddy 返回 404,然后仍然发送数据。
结果是当我右键单击要以这种方式处理的链接时,我可以“另存为”,一切正常。如果文件是图像,则打开没有问题。但是,如果我只是单击链接并且它是要下载而不是在浏览器中查看的文件,我会在所有浏览器中收到“找不到文件”错误。Firebug 控制台声称这是一个 404 错误,无论文件是否成功传输。我的代码如下:
$folder = explode( "/" , $_SERVER["REQUEST_URI"] );
$pageName = $folder[sizeof($folder)-1];
$sql = "SELECT data, mimeType, OCTET_LENGTH(data) AS size FROM tblFiles WHERE fileName = '".$pageName."' AND active=1;";
$result = mysql_query("$sql") or die();
$data = mysql_fetch_array($result);
header("HTTP/1.0 200 OK");
header("Content-Type: ".$data['mimeType']);
header("Content-Length: ".$data['size']);
echo $data['data'];
和 .htaccess 文件:
ErrorDocument 404 /FILES/dbFiles/getFile.php
现在这是 /FILES/dbFiles 中的完整 .htaccess 文件。我不知道 GoDaddy 是否期待那里有更多的东西,但它似乎就像在我自己的服务器上写的一样工作。
我尝试了多种标题信息组合,但没有任何积极影响。
我的代码显然有效,但我似乎无法阻止 404 发生。
谢谢!-杰尔