标题添加内容 - 处置“附件”导致内部服务器错误

时间:2012-04-08 23:03:44

标签: apache .htaccess download

由于我的电子书阅读器(Sony PRS-T1)的内置浏览器非常愚蠢,并且想要将.epub文件作为文本文件打开而不是下载它们,我试图强制浏览器下载.epub文件这个.htaccess文件:

<FilesMatch "\.(?i:epub)$">
  ForceType application/octet-stream
  Header add Content-Disposition "attachment"
</FilesMatch>

但是,这会导致内部服务器错误:

  

内部服务器错误

     

服务器遇到内部错误或配置错误   无法完成您的请求。

     

请联系服务器管理员,网站管理员@ localhost和   告诉他们错误发生的时间,以及你可能做的任何事情   已经完成可能导致错误。

     

有关此错误的详细信息可能在服务器错误中可用   日志中。

当我遗漏Header add Content-Disposition "attachment"时没有错误 - 但是,浏览器不会下载文件:(

我做错了吗?内部服务器错误来自哪里?

[编辑2013-04-11]

我刚为这个帖子赢得了“热门问题徽章”,这让我想起了添加一些信息。

我终于设法使用以下php-function强制下载Sony的PRS-T1浏览器

function startDownload($path, $mimeType) {
if(!file_exists($path)) {
// File doesn't exist, output error
exit('file not found');
} else {
$size = filesize($path);
$file = basename($path);

// Set headers
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=\"$file\"");
header("Content-Type: $mimeType");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
// Read the file from disk
readfile($path);
}

exit();
}

希望有一天可以帮助某人。

3 个答案:

答案 0 :(得分:3)

这可能就是答案:

http://diogomelo.net/node/24

  

Apache上默认不启用模块头。所以,我们必须   手动启用它。

     

要启用此模块,请以root用户身份登录,并从中创建符号链接   mods-available / headers.load到mods-enabled。之后,重新加载apache   它已经完成了。为此,我使用了这个命令。

su - cd
/etc/apache2/mods-enabled/ ln -s ../mods-available/headers.load
headers.load sh /etc/init.d/apache2 force-reload

答案 1 :(得分:1)

在htaccess文件中使用之前,您可能还需要确保已启用标头模块。如果未启用headers模块,则以下行将生成错误:

Header set Content-Disposition "attachment"

这是一个强制下载mp3文件的示例,只有在启用了header模块时才会这样做:

<IfModule mod_headers.c>
    <FilesMatch "\.(mp3|MP3)$">
        ForceType audio/mpeg
        Header set Content-Disposition "attachment"
        Allow from all
    </FilesMatch>
</IfModule>

注意:它不启用模块,如果未启用模块,它只会忽略IfModule标记内的任何内容。

要启用apache模块,您需要编辑httpd.conf文件,或者在wamp服务器中,您可以单击wamp tray图标并选择“Apache - &gt; Apache Modules - &gt; headers_module”或确保选中它

答案 2 :(得分:0)

对于ubuntu,theres是启用apache2头模块的快捷方式,使用:

sudo a2enmod headers

问题解决了^ _ ^