Каталог MissingControllerException в /app/webroot/file/

Я получаю эти сообщения в своем 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. Я создаю URL-адрес вручную в представлении .ctp следующим образом:

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

Я не использую echo $this->Html->image('cake_logo.png', array('alt' => 'CakePHP'));

Как я могу добавить ControllerException, чтобы каталог «файлы» в webroot не определялся как контроллер. У меня нет FilesController. Или возможно, что "файл" является защищенным словом в CakePHP, которое не следует использовать? До сих пор не удалось найти ничего похожего в CakeBook.

.htaccess в /webroot

<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. Спасибо за любую помощь.


person mart    schedule 08.05.2013    source источник
comment
Как вы создаете URL-адрес, который дает вам эту ошибку? Можете ли вы обновить вопрос с этим кодом?   -  person Nunser    schedule 08.05.2013
comment
Я обновил вопрос с кодом, как я создаю файл.   -  person mart    schedule 09.05.2013
comment
Вы используете оригинальный .htaccess? Или вы внесли в это изменения (например, переместили настройки перезаписи на виртуальный хост)?   -  person thaJeztah    schedule 09.05.2013
comment
Я обновил вопрос с помощью .htaccess. Я добавил к оригиналу правило перезаписи, чтобы вместо domain.com стало www.domain.com. Я не модифицировал другие файлы .htaccess.   -  person mart    schedule 09.05.2013
comment
@mart где ты смог решить проблему? у меня такая же проблема с каталогом webroot/uploads/.   -  person Amjo    schedule 17.12.2017


Ответы (2)


Добавьте правило в свой .htaccess, чтобы URL-адреса запросов, начинающиеся с /files/, не направлялись на index.php.

Кстати, старайтесь не генерировать URL-адреса отсутствующих файлов :)

person ADmad    schedule 08.05.2013
comment
Вы говорите, что файл существует, но запрос перенаправляется на cakephp. Это невозможно с правилами перезаписи по умолчанию в .htaccess. Если путь /files/thumbs1/1354046882.jpg существует в вашем корневом каталоге и файл доступен для чтения веб-сервером, он должен обслуживаться самим веб-сервером. - person ADmad; 09.05.2013
comment
Спасибо. Похоже, у меня где-то есть проблема с правилом перезаписи, но я не могу найти ее до сих пор. - person mart; 09.05.2013
comment
Что ж, вы можете заменить файл webroot/.htaccess немодифицированным файлом из свежего пакета cakephp. - person ADmad; 09.05.2013

Если я все правильно понял, то проблема только в том, что вы пишете не те адреса.

Я собираюсь предположить здесь некоторые вещи: структура ваших папок похожа на

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

И что вы хотите, так это показать изображение, расположенное в этом каталоге файлов, верно?

Затем вам необходимо убедиться, что вы правильно указали пути. . Если вы не скажете cake, что хотите файл в своем веб-каталоге, то с этим типом URL-адреса

files/something/something-else

Cake просто подумает: «Хорошо, это путь controller/action/params (это обобщение, очевидно, что это предположение можно изменить с помощью routing)" и завершится ошибкой, поскольку files не является контроллером.

Итак, чтобы исправить это, каждый раз, когда вы хотите указать на что-то в каталоге webroot, добавляйте это в путь. В вашем случае это должно быть

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

А если файл существует, то он должен отображаться без ошибок.

person Nunser    schedule 08.05.2013