Я запускаю среду LAMP с CodeIgniter. Я хочу иметь возможность использовать его шаблон URL, например, http://localhost/controller/function/ID
, но по умолчанию он должен быть http://localhost/index.php/controller/function/ID
. В руководстве пользователя сказано, что мне нужен файл .htaccess, чтобы сделать возможным первый стиль, и использует его в качестве примера:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Но я не понимаю, как это работает. Куда мне поместить .htaccess? Должен ли он быть в корне сервера?
Что делать, если у меня есть несколько сайтов, работающих на моем сервере. Должен ли я помещать его в /var/www/
и указывать условия в зависимости от того, какие каталоги загружаются? Или я могу просто поставить его в /var/www/site_using_codeigniter/
? Я не уверен, как заставить это работать.
Могу ли я сделать так, чтобы он отображался на URL-адрес MVC только в том случае, если запрошенный URL-адрес фактически не существует? Например, http://localhost/articles/2009/some-article-name
не будет каталогом на сервере, поэтому он будет сопоставлен с index.php
и передан codeigniter, но http://localhost/forum
будет существовать на сервере, но не должен обрабатываться codeigniter.
Какие-нибудь другие вещи, которые я должен сделать с файлом .htaccess? Что хорошего можно прочитать о них?
Обновить
Я изменил свой файл конфигурации следующим образом:
$config['index_page'] = ""; //used to be "index.php"
и добавил это в файл .htaccess
:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
и сохранил его в корневом каталоге моего сайта (в данном случае /var/www/cms/
)
Я зашел в /etc/apache2/conf.d/security (который включен в /etc/apache2/apache2.conf) и сделал следующее:
<Directory />
AllowOverride All #was "none", but this was all commented out
Order Deny,Allow
Deny from all
</Directory>
Однако он все еще не работает. Если я перейду к http://localhost/cms/index.php/hello
, он напечатает «Привет», но http://localhost/cms/hello
выдает ошибку 404.
Идеи?
обновление: большой успех!
Мне пришлось копаться в моих файлах конфигурации apache, чтобы, наконец, найти, где были определены все каталоги (я никогда не возился с файлами конфигурации сервера до этой даты), и нашел надоедливую AllowOverride None
, которая мешала моим планам величия.
Теперь он работает отлично. Все ответы здесь жизнеспособны и работают.