Как написать файл .htaccess для создания маршрутизации URL-адресов CodeIgniters?

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

Любые другие вещи, которые я должен делать с файлом .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) и сделал следующее:

  AllowOverride All #was "none", but this was all commented out Order Deny,Allow Deny from all  

Однако он все еще не работает. Если я перейду к http://localhost/cms/index.php/hello , он напечатает «Hello there», но http://localhost/cms/hello дает ошибку 404.

Идеи?

обновление: græt success!

Мне пришлось прорыть мои конфигурационные файлы apache, чтобы наконец найти, где были определены все каталоги (я никогда не встречался в файлах конфигурации сервера до этой даты) и нашел, что надоедливый AllowOverride None который AllowOverride None моих планов величия.

Теперь он работает отлично. Все ответы здесь жизнеспособны и работают.

В вашей system/application/config/config.php измените

 $config['index_page'] = "index.php"; 

в

 $config['index_page'] = ""; 

и в вашем .htaccess добавьте следующее:

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

Добавьте файл .htaccess в тот же каталог, где находится system папка, поэтому в корневом каталоге CodeIgniter у вас должно быть

  • система /
  • гид пользователя/
  • index.php
  • .htaccess
  • license.txt

Кроме того, поскольку на вашем сервере работает несколько сайтов, вы можете иметь VirtualHosts. Добавьте это к последней части вашего apache2.conf для каждого сайта, который у вас есть:

 Listen *:11000  ServerAdmin [email protected] DocumentRoot "/var/www/cms" ServerName you-dummy.com  AllowOverride All Options +Indexes DirectoryIndex index.php Order allow,deny Allow from all  ErrorLog logs/cms_log CustomLog logs/cms_log common  

Теперь вы можете получить доступ к сайту с http://localhost:11000/ и получить доступ к controllerу с помощью http://localhost:11000/hello .

Пробовал ответ здесь, но это не сработало для меня. Поэтому я попробовал следующее, и это произошло …

создайте .htaccess в корневом каталоге, где доступен index.php вместе с license.txt. введите следующий код в файл и сохраните его:

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

сделанный! попробуйте, и это наверняка сработает. Надеюсь, поможет

Были некоторые проблемы с поиском, где изменить «AllowOverRide All».

Из этого руководства я нашел файл (по умолчанию).

Удалить URL-адрес индекса Index.php на Ubuntu

  1. Предварительная записка. Я выполняю все шаги этого руководства с привилегиями root, поэтому убедитесь, что вы вошли в систему как пользователь root:

     sudo su 
  2. Включить модуль mod_rewrite на apache. Сначала включите модуль следующим образом:

     a2enmod rewrite 

    Измените все случаи появления «AllowOverRide None» на «AllowOverRide All». В основном все «Нет» для «Все» в следующем файле:

      gedit **/etc/apache2/sites-available/default** 

    Перезапустить Apache:

     /etc/init.d/apache2 restart 
  3. Откройте файл config.php на CodeIgniter (приложение \ config). Удалить index.php на $config['index_page'] = "index.php";

     $config['index_page'] = ""; 
  4. Создайте файл .htaccess в корневом каталоге CodeIgniter. Заполните файл с помощью этого кода:

     RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] 

Теперь Index.php на URL CodeIgniter исчезает

Этот конкретный файл .htaccess выглядит так, как будто он должен находиться в корне вашего сайта (что означает, в настоящее время исполняемый сайт).

Просмотрите документацию для RewriteCond чтобы узнать, какие другие условия вы можете указать. В основном RewriteRule будет применяться только в том случае, если все предыдущие RewriteCond s совпадают. Вы можете попробовать добавить эти правила только для перенаправления, если запрошенный URL не существует:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 

mod_rewrite очень мощный, но может быть настоящей болью, если он не делает то, что, по вашему мнению, должен. Я также не знаю, как отлаживать его директивы.

Что еще можно сделать с файлом .htaccess, файлы Apache для файлов htaccess всегда являются хорошим местом для начала. Наиболее распространенное использование – для проверки подлинности для каждого каталога. Большинство директив конфигурации сервера поддерживаются в файле .htaccess (при условии, что это разрешает AllowOverride сервера), но некоторые имеют другой синтаксис.

Поместите это в корень документа вашего веб-сайта.

Если у вас несколько сайтов, поместите их вверху каждого такого сайта.

Если у вас несколько сайтов, работающих из одного и того же каталога, вы можете использовать RewriteCond для исключения или включения определенных сайтов в правило перезаписи.

Вы можете исключить определенные каталоги (например, / статьи) одинаково.

У меня были те же проблемы с образами ссылок CodeIgnitor, js, css. Теперь все работает благодаря вам, ребята! Я выполнил следующие шаги. объединил все остальные комментарии в мой сценарий для работы. Надеюсь, это поможет кому-то.

  1. изменен httpd.conf

      AllowOverride All #was "none", but this was all commented out Order Deny,Allow Deny from all  
  2. создал пустой файл .htaccess в каталоге htdocs \ yoursite (site root) и вставил следующее.

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

Попробуйте это, он работает perfetct

 DirectoryIndex index.php RewriteEngine on RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ ./index.php/$1 [L,QSA] 
  RewriteEngine on RewriteBase / # Removes the "/" at the end RewriteRule (.+)/$ /$1 [L,R] RewriteCond $1 !^(index\.php|dhtml|img|css|js|favicon\.ico|robots\.txt) RewriteRule ^([^?&]+) /index.php/$1 [L]  
 RewriteEngine on RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico) RewriteRule ^(.*)$ ./index.php/$1 [L,QSA] 

Простой в .htaccess в корневой папке! Работает на меня.

  • Переписать URL-адрес с .htaccess для нескольких параметров
  • Использование mod rewrite для изменения URL с переменной имени пользователя
  • .htaccess не работает на localhost с XAMPP
  • Как регулярные выражения работают в htaccess для перенаправления диапазона IP
  • htaccess перенаправляет для не-www как http, так и https
  • Как удалить .htaccess защиту паролем из подкаталога
  • переписать имя папки с помощью .htaccess
  • urlencoded
  • Как заблокировать вызов iframe
  • Лучшая практика: 301 Перенаправление HTTP на HTTPS (стандартный домен)
  • .htaccess переписать для перенаправления корневого URL в подкаталог
  • Давайте будем гением компьютера.