CakePHP:如何允许公共访问/ webroot之外的目录中的文件

时间:2013-10-11 02:18:22

标签: .htaccess cakephp cakephp-2.0

我希望能够通过像/app/somefile/file.pdf这样的apache打开位于http://mysite/app/somefile.file.pdf文件夹中的pdf。我试过在CakePHP的.htaccess文件中添加一个RewriteCond:

RewriteCond %{REQUEST_URI} !^/app/somefolder/ - [L]

但只是得到500错误。我做错了什么?

4 个答案:

答案 0 :(得分:1)

在您的控制器中使用它并使用路径以您希望的方式访问它,为世界打开其他文件夹不是一个好主意

发送文件

有时您希望将文件作为请求的响应发送。在2.3版之前,您可以使用Media Views来完成此任务。从2.3开始,不推荐使用MediaView,您可以使用CakeResponse::file()发送文件作为响应:

public function sendFile($id) {
    $file = $this->Attachment->getFile($id);
    $this->response->file($file['path']);
    //Return reponse object to prevent controller from trying to render a view
    return $this->response;
`enter code here`}

如上面的示例所示,您必须将文件路径传递给方法。 CakePHP将发送正确的内容类型标头,如果它是CakeReponse :: $ _ mimeTypes中列出的已知文件类型。您可以在使用CakeResponse::file()方法调用CakeResponse::type()之前添加新类型。

如果需要,您还可以通过指定选项强制下载文件而不是在浏览器中显示:

$this->response->file($file['path'], array('download' => true, 'name' => 'foo'));

来源:http://book.cakephp.org/2.0/en/controllers/request-response.html#cake-response-file

答案 1 :(得分:0)

您可以使用Apache alias使该目录的内容可公开访问:

Alias /app/somefile /app/webroot/somefile

将上述代码放在服务器/虚拟主机配置文件中,而不是.htaccess。

确保Web服务器用户具有该目录的读访问权。

答案 2 :(得分:0)

您可以为它们创建一个符号链接,但您的apache配置可能会或可能不会被允许跟随它们。

答案 3 :(得分:0)

我能够这样做只需将它添加到根目录中的.htaccess文件中:

RewriteCond %{REQUEST_URI} !^/app/somefolder/

(我的原始版本有[L]这是不正确的,这就是它无法正常工作的原因。)

万一有人不知道:这通常不是一件安全的事情。我有非常具体的理由这样做。