2

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

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

但只是得到一个 500 错误。我究竟做错了什么?

4

4 回答 4

1

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

发送文件

有时您希望发送文件作为对请求的响应。在 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

于 2013-10-16T13:49:18.427 回答
0

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

Alias /app/somefile /app/webroot/somefile

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

确保 Web 服务器用户对该目录具有读取权限。

于 2013-10-11T03:50:05.937 回答
0

我能够做到这一点,只需将其添加到根目录中的 .htaccess 文件中:

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

(我的原始版本有一个[L]不正确的,这就是它不起作用的原因。)

以防万一有人还不知道:这通常不是一件安全的事情。我这样做有非常具体的原因。

于 2013-10-11T13:31:06.140 回答
0

您可以只对它们进行符号链接,尽管您的 apache 配置可能会或可能不会被允许遵循它们。

于 2013-10-11T04:18:47.007 回答