【问题标题】:MissingControllerException directory in /app/webroot/file//app/webroot/file/ 中的 MissingControllerException 目录
【发布时间】:2013-05-08 12:01:28
【问题描述】:

我在 error.log 中收到这些消息:

Request URL: /files/thumbs1/1354046882.jpg
Stack Trace:
#0 /path/to/web/app/webroot/index.php(92):     Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#1 {main}
2013-05-08 13:44:16 Error: [MissingControllerException] Controller class     FilesController could not be found.
Exception Attributes: array (
  'class' => 'FilesController',
  'plugin' => NULL,
)

图像文件 /files/thumbs1/1354046882.jpg 存在并显示。但除此之外,我在 error.log 中得到错误。 我在视图 .ctp 中手动生成 url,如下所示:

<img src="/files/thumbs1/1354046882.jpg" alt="">

我不使用 echo $this->Html->image('cake_logo.png', array('alt' => 'CakePHP'));

如何添加ControllerException,使webroot 中的“文件”目录不被识别为控制器。我没有 FilesController。 或者是否有可能,“文件”是 CakePHP 中不应使用的受保护词?目前在 CakeBook 中找不到相关的内容。

/webroot 中的 .htaccess

<IfModule mod_rewrite.c>
   RewriteCond %{HTTP_HOST} !www.domainname.com
   RewriteRule (.*)  http://www.domainname.com/$1 [R=301,L]
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

我更新到 CakePHP 2.3。 感谢您的帮助。

【问题讨论】:

  • 你是如何产生这个错误的 url 的?你能用那个代码更新问题吗?
  • 我用我如何生成文件的代码更新了这个问题。
  • 你用的是原版.htaccess吗?或者您是否对此进行了修改(例如将重写设置移动到虚拟主机)?
  • 我用 .htaccess 更新了问题。我在原来的基础上添加了一条重写规则,从 domain.com 变成 www.domain.com。我没有修改任何其他 .htaccess
  • @mart 哪里能解决问题?我对 webroot/uploads/ 目录有同样的问题。

标签: cakephp cakephp-2.3


【解决方案1】:

在您的 .htaccess 中添加一条规则,以便以 /files/ 开头的请求 url 不会被路由到 index.php。

顺便说一句,尽量不要为丢失的文件生成 url :)

【讨论】:

  • 你说文件仍然存在请求被路由到 cakephp。使用 .htaccess 中的默认重写规则是不可能的。如果路径 /files/thumbs1/1354046882.jpg 存在于您的 webroot 中并且该文件可由 web 服务器读取,则它应该由 web 服务器本身提供服务。
  • 谢谢。看起来如果我在某个地方的重写规则有问题,但我到现在都找不到。
  • 你可以用新的 cakephp 包中未修改的文件替换你的 webroot/.htaccess 文件。
【解决方案2】:

如果我对所有内容都理解正确,那么您唯一的问题就是没有编写正确的网址。

我将在这里假设一些事情:您的文件夹结构类似于

/app
    /Config
    /Console
    ...
    /webroot
        /files
/lib
/plugins
/vendors

你想要的是显示位于这个文件目录中的图像,对吧?

那么你需要确保get your paths right。如果你不告诉 cake 你想要一个文件在你的 webroot 中,那么使用这种类型的 url

files/something/something-else

cake 只是会想“好的,这条路径是 controller/action/params(这是一个概括,显然这个假设可以用 routing 修改)”,然后失败,因为 files 不是控制器。

因此,要解决此问题,每次您想要指向 webroot 目录中的某些内容时,请将其添加到路径中。在你的情况下应该是

<img src="<?php echo $this->webroot; ?>files/thumbs1/1354046882.jpg" alt="">

如果文件存在,它应该显示没有错误。

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 2022-01-01
    • 2013-12-26
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多