Я использую 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
, который выглядит довольно плохо.
Каждый сталкивался стакая же проблема раньше?Большое спасибо всем вам.