Получение 404 страницы, не найденной в журнале с использованием Codeigniter 1.7.2 + HMVC - PullRequest
0 голосов
/ 02 января 2011

Я использую Codeigniter 1.7.2 и HMVC (https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home).

У меня есть эти файлы, и они организованы в соответствии с HMVC:

system/application/modules/welcome/controllers/welcome.php
system/application/modules/welcome/views/index.php

В routes.php я установилвверх по маршруту:

routes['welcome']='welcome/index';

Все работает, если URL-адрес находится в этом шаблоне: http://www.mydomain.com/index.php/welcome

Но теперь я хотел бы удалить index.php из URL-адреса, поэтому я создалфайл .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L]

Затем я установил $config['index_page'] пустым:

$config['index_page'] = "";

Теперь я могу получить доступ к странице в этом шаблоне URL: http://www.mydomain.com/welcome

Хотя все, кажется, работает, я нахожу, что каждый раз, когда я получаю доступ к странице, она генерирует ошибку 404 страница не найдена в журнале:

DEBUG - 2011-01-02 08:28:52 --> URI Class Initialized
ERROR - 2011-01-02 08:28:52 --> 404 Page Not Found --> 

Это не относится к странице welcomeвсе страницы имеют ту же проблему. Я покопался в кодах и обнаружил, что это сообщение 404 Page Not Found генерируется из MX_Router.php, который поставляется с HMVC. В частности, это из этой функции:

public function _validate_request($segments) {      

    /* locate module controller */
    if ($located = $this->locate($segments)) return $located;

    /* use a default 404 controller */
    if (isset($this->routes['404']) AND $segments = explode('/', $this->routes['404'])) {
        if ($located = $this->locate($segments)) return $located;
    }   

    /* use a default 404_override controller CI 2.0 */
    if (isset($this->routes['404_override']) AND $segments = explode('/', $this->routes['404_override'])) {
        if ($located = $this->locate($segments)) return $located;
    }

    /* no controller found */
    show_404();
}

Это функция show_404 (), которая вызывается, и поэтому я получаю это сообщение об ошибке. Но так как яможет получить доступ к каждой странице без каких-либо проблем, используя шаблон URL, у которого удалено index.php.

Почему HMVC считает, что в этой функции _validate_request() не найден контроллер?Я не получу сообщение об ошибке 404 в журнале, если отменить изменения, но это также означает, что я должен продолжать использовать шаблон URL с index.php, который выглядит довольно плохо.

Каждый сталкивался стакая же проблема раньше?Большое спасибо всем вам.

Ответы [ 2 ]

3 голосов
/ 06 января 2011

Я думаю, что проблема как-то связана с favicon.ico, некоторые веб-браузеры автоматически запрашивают yourdomain.com/favicon.ico и, если его нет, генерирует ошибку 404 в журнале.

0 голосов
/ 02 января 2011

Возможно ошибка в вашем файле .htaccess.Официальное руководство пользователя на самом деле имеет пример для этого:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Проблема все еще возникает с этим кодом в вашем .htaccess?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...