Я запускаю среду 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/apache 2/conf.d/security (который включен /etc/apache 2/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
, он напечатает "Hello there", но http://localhost/cms/hello
дает ошибку 404.
Идеи?
update: græt success!
Мне пришлось прорыть мои конфигурационные файлы apache, чтобы наконец найти, где были определены все каталоги (я никогда не сталкивался с файлами конфигурации сервера до этой даты) и обнаружил, что надоедливый AllowOverride None
, который лишил моих планов величия.
Теперь он отлично работает. Все ответы здесь жизнеспособны и работают.