Я создаю блог-сайт с использованием CI. Я использую HMVC plugin. Модуль, над которым я работаю, - «/ journal».CodeIgniter + mod_rewrite URI сокращение
Доступ к отдельным статьям осуществляется в/journal/article/ID/SLUG. Это прекрасно работает, но я хотел бы сократить URI на/journal/ID/SLUG с помощью mod_rewrite.
Вот мои правила:
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^journal/([0-9]+)(.*)$ index.php?/journal/article/$1$2 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1
Для тестирования я использую/журнал/2.
Я знаю, что правила соответствуют. Если, например, я переадресую перенаправление на http://google.com, я действительно перенаправляюсь в Google. Однако, когда вы используете правило, как написано, оно, кажется, игнорируется, и я получаю 404 независимо от того, что я вставляю.
Я делаю некоторые очевидные (или тайные) ошибки?
Редактировать: Я понял это вскоре после размещения вопроса. Мои правила действительно правильно, но мне нужно изменить следующую строку в конфигурационном/config.php:
$config['uri_protocol'] = 'AUTO';
к
$config['uri_protocol'] = 'PATH_INFO';
Я не буду утверждать, чтобы точно знать, что делает это изменение или почему его исправляет проблему. Возможно, кто-то может объяснить объяснение.
Если вы посмотрите на строку 87 CodeIgniter file (system/core/URI.php) function _fetch_uri_string(), вы можете увидеть логику настройки AUTO. Короче говоря, он проверяет, вызывает ли командная строка (CLI), и проверяет PATH_INFO, QUERY_STRING и т. Д., Чтобы попытаться определить, какой URI вы захотите. Я хотел бы указать что-то помимо AUTO, так что вы точно знаете, что такое поведение. – stellablue