Проблемы с кодировкой CodeIgniter и URL-адрес перезаписи

Я никогда раньше не использовал CodeIgniter, не говоря уже о ANY php framework, и я думал, что попробую. Все идет хорошо, но я не могу удалить index.php из URL-адреса и по-прежнему получать доступ к моим страницам.

Я никогда не использовал структуру MVC, поэтому я учусь, когда я иду, поэтому простите меня, если я сделаю это неправильно.

Я пытаюсь получить доступ к созданному мной представлению "about_page.php", просто набрав localhost/ci/about, но в настоящее время я могу получить к нему доступ только с помощью localhost/ci/index.php/о

Контроллер для страницы: /application/controllers/about.php
Модель для страницы: /application/models/about_model.php
И представление для страницы: /application/views/about_page.php

Я искал решение этой проблемы, но не смог ее найти. Здесь я уже искал:

CodeIgniter - удаление index.php
Codeigniter - как удалить index.php из URL?
http://www.farinspace.com/codeigniter-htaccess-file/

CodeIgniter поставляется с файлом .htaccess в папке "приложение", которая содержит только Allow Deny From All. Поэтому я создал новый файл .htaccess в корневом каталоге http://localhost/ci/.htaccess и добавил к нему этот код:

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

Когда файл .htaccess находится в корневом каталоге, я получаю 500 Internal Server Error. Когда я копирую один и тот же файл в папку приложений, ошибка 500 исчезает, но я до сих пор не могу получить доступ к странице about, используя localhost/ci/about

Я уже изменил $config['index_page'] = 'index.php'; на $config['index_page'] = ''; И я попытался изменить $config['uri_protocol'] = 'AUTO'; на $config['uri_protocol'] = 'REQUEST_URI';, но я все еще получаю внутреннюю ошибку сервера.

Я зашел в файл httpd.conf и раскомментировал модуль mod_rewrite.so, поэтому я знаю, что mod_rewrite активен.

Есть ли у кого-нибудь идеи, почему это не работает или как я могу получить эту работу? Я знаю, что на StackOverflow много вопросов по этой теме, но я не мог найти ответ на мой вопрос.

Я делаю это правильно? Должен ли я даже получить доступ к странице about, посещая localhost/ci/about или мне нужно создать каталог "about" в каталоге "application"?

Ответ 1

Для удаления index.php существует 3 шага.

  • Сделайте следующие изменения в файле application/config.php

    $config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'AUTO';
    
  • Сделайте .htaccess файл в корневом каталоге, используя ниже код

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
  • Включить механизм перезаписи (если он еще не включен)

    i. Сначала запустите его с помощью следующей команды:

    a2enmod rewrite
    

    ii. Отредактируйте файл /etc/apache2/sites-enabled/000-default

    Измените все AllowOverride None на AllowOverride All.

    Примечание. В последней версии вам необходимо изменить файл /etc/apache2/apache2.conf

    iii. Перезагрузите сервер следующей командой:

    sudo /etc/init.d/apache2 restart
    

Ответ 2

Ваш .htaccess немного выключен. Посмотрите на мои:

 RewriteEngine On
 RewriteBase /codeigniter  

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
  RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]

Обратите внимание на "codeigniter" в двух местах.

после этого в вашей конфигурации:

base_url = "http://localhost/codeigniter"
index = ""

Измените codeigniter на "ci" в зависимости от типа

Ответ 3

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /dmizone_bkp
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
   RewriteRule ^(.*)$ /dmizone_bkp/index.php?/$1 [L]
</IfModule> 

Ответ 4

Это работает для меня

Переместите файл .htaccess в корневую папку (найдите в папке приложения в моем случае)

RewriteEngine on
RewriteBase /yourProjectFolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

Mine config.php выглядит следующим образом (application/config/ config.php)

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

Сообщите мне, если он тоже работает для вас, ребята! Приветствия!

Ответ 5

если не работает

$config['uri_protocol'] = 'AUTO';

измените его на

$config['uri_protocol'] = 'PATH_INFO';

если не работает, измените его на

$config['uri_protocol'] = 'QUERY_STRING';

если использовать этот

$config['uri_protocol'] = 'ORIG_PATH_INFO';

с перенаправлением или заголовком для URL-адреса не в htaccess не будет работать, вы должны добавить URL-адрес в htaccess для работы

Ответ 6

Для пользователей wamp-сервера следуйте первым двум шагам решения @Raul Chipad, а затем:

  1. Нажмите на значок wamp (обычно зеленый), перейдите в "Apache" > "Apache modules" > "rewrite_module". "Rewrite_module" должен быть отмечен галочкой! И тогда это путь!

Ответ 7

Я использую что-то вроде этого codeigniter-htaccess-file, это хорошая статья для начала.

  • оставить файл .htaccess в корневом каталоге CI
  • убедитесь, что mod_rewrite включен
  • проверить наличие опечаток (например, имя файла контроллера/имя класса)
  • в /application/config/config.php set $config['index_page'] = "";
  • в /application/config/routes.php установить ваш контроллер по умолчанию $route['default_controller']="home";

Если вы выполняете чистую установку CI (2.1.3), на самом деле не так много, что может быть неправильно.

  • 2 конфигурационных файла
  • .htaccess
  • mod_rewrite

прочитать

Ответ 8

Просто добавьте это в файл .htaccess:

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]