我希望能够通过像/app/somefile/file.pdf
这样的apache打开位于http://mysite/app/somefile.file.pdf
文件夹中的pdf。我试过在CakePHP的.htaccess文件中添加一个RewriteCond:
RewriteCond %{REQUEST_URI} !^/app/somefolder/ - [L]
但只是得到500错误。我做错了什么?
答案 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]
这是不正确的,这就是它无法正常工作的原因。)
万一有人不知道:这通常不是一件安全的事情。我有非常具体的理由这样做。