我希望能够/app/somefile/file.pdf
像这样通过 apache打开位于文件夹中的 pdf http://mysite/app/somefile.file.pdf
。我尝试在 CakePHP 的 .htaccess 文件中添加 RewriteCond:
RewriteCond %{REQUEST_URI} !^/app/somefolder/ - [L]
但只是得到一个 500 错误。我究竟做错了什么?
我希望能够/app/somefile/file.pdf
像这样通过 apache打开位于文件夹中的 pdf http://mysite/app/somefile.file.pdf
。我尝试在 CakePHP 的 .htaccess 文件中添加 RewriteCond:
RewriteCond %{REQUEST_URI} !^/app/somefolder/ - [L]
但只是得到一个 500 错误。我究竟做错了什么?
在您的控制器中使用它并使用路由以您想要的方式访问它,为世界打开其他文件夹不是一个好主意
发送文件
有时您希望发送文件作为对请求的响应。在 2.3 版之前,您可以使用媒体视图来完成此操作。自 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`}
如上例所示,您必须将文件路径传递给该方法。如果它是 CakeReponse::$_mimeTypes 中列出的已知文件类型,CakePHP 将发送正确的内容类型标头。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
您可以使用 Apache别名使该目录的内容可公开访问:
Alias /app/somefile /app/webroot/somefile
将上述代码放在服务器/虚拟主机配置文件中,而不是 .htaccess。
确保 Web 服务器用户对该目录具有读取权限。
我能够做到这一点,只需将其添加到根目录中的 .htaccess 文件中:
RewriteCond %{REQUEST_URI} !^/app/somefolder/
(我的原始版本有一个[L]
不正确的,这就是它不起作用的原因。)
以防万一有人还不知道:这通常不是一件安全的事情。我这样做有非常具体的原因。
您可以只对它们进行符号链接,尽管您的 apache 配置可能会或可能不会被允许遵循它们。