Rewriterule для CodeIgniter не работает - PullRequest
5 голосов
/ 24 ноября 2011

Я установил чистый сервер Apache2 (плюс PHP и MySQL) и включил mod_rewrite в конфигурации apache.Я добавил файл .htaccess, чтобы удалить index.php из URL, как описано в вики CodeIgniter.

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

Я поместил этот файл в корень сайта.

Когда я пытаюсь получить доступ к URL mydomain.local/index.php/welcome, я получаю страницу CodeIgniter по умолчанию.Но когда я пытаюсь получить доступ к той же странице через mydomain.local/welcome, я получаю страницу 404.

Как я могу проверить, работает ли все правило перезаписи?А почему не работает?

Ответы [ 6 ]

9 голосов
/ 25 ноября 2011

Я нашел решение. Файл htaccess не был разрешен для запуска конфигурацией Apache. Поэтому мне пришлось установить флаг AllowOverride в каталоге на AllowOverride ALL.

Спасибо за помощь!

9 голосов
/ 24 ноября 2011

Предполагая, что в вашей конфигурации ( / application / config / config.php ) отключена страница index_page:

$config['index_page'] = '';

А ваш Apache DocumentRoot это: / srv / www /

Создайте файл .htaccess на том же уровне, что и каталог / application / , со следующим содержимым:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

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

Вы должны заметить, что RewriteBase указывает на DocumentRoot (/). Если index.php находится в другом каталоге, вы должны изменить RewriteBase соответственно.

Для структуры каталогов, например:

/srv/www/application/
/srv/www/system/
/srv/www/index.php
/srv/www/.htaccess

Ваш RewriteBase должен быть: /

Для структуры каталогов, например:

/srv/www/codeigniter/application/
/srv/www/codeigniter/system/
/srv/www/codeigniter/index.php
/srv/www/codeigniter/.htaccess

Ваш RewriteBase должен быть: / codeigniter /

И так далее, вы получите изображение.

1 голос
/ 19 сентября 2013

По умолчанию .htaccess (из ci userguide http://ellislab.com/codeigniter/user-guide/general/urls.html)

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

Я немного запутал приведенный выше код, но у меня есть такой код:

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

На локальном хосте вынеобходимо добавить «./» перед index.php (3-я строка), потому что в моем случае каталог ci не помещается в корневой каталог. Я думаю, "./" означает, что он должен быть относительно путь. Для дополнительного условия ".*\.css|.*\.js|.*\.png" это означает, что apache не должен переписывать файл с расширениями css, js и png.

0 голосов
/ 22 июля 2016

Если вы столкнулись с 500 Internal Server Error.Первое место для поиска - файл apache error.log.Для меня ошибка была связана с командой AddOutputFilterByType.

Недопустимая команда 'AddOutputFilterByType', возможно, с ошибкой или определена модулем, не включенным в конфигурацию сервера.

Для моей конфигурации два модуля не были включены в конфигурации apache, в то время как соответствующие команды использовались в .htaccess.Поэтому, как только я включил filter_module и deflate_module, все вернулось к норме.

0 голосов
/ 25 ноября 2011

Попробуйте изменить настройки конфигурации uri_protocol. Кроме того, некоторые серверы требуют эту модификацию в файле htaccess:

RewriteRule ^(.*)$ /index.php/?$1 [L]

Знак вопроса после последней косой черты. Попробуйте это.

Также убедитесь, что ваш mod_rewrite включен.

0 голосов
/ 24 ноября 2011

вам нужно удалить файл index.php со страницы индекса в файле конфигурации

/ приложение / Config / config.php

$config['index_page'] = '';

Попробуйте это .htaccess, это то, что я использую:

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Вам также может понадобиться включить mod_rewite в вашей конфигурации apache.

...