it-swarm.com.ru

CodeIgniter htaccess и проблемы с перезаписью URL

Я никогда раньше не использовал CodeIgniter, не говоря уже о ЛЮБОМ фреймворке php, и я подумал, что попробую. Все идет хорошо, за исключением того, что я не могу удалить index.php из URL и по-прежнему получить доступ к моим страницам. 

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

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

Контроллер для страницы: /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 в папке «application», которая содержит только 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?

35
Ty Bailey

Есть 3 шага для удаления index.php.

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

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

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

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

    a2enmod rewrite
    

    II. Редактировать файл /etc/Apache2/sites-enabled/000-default

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

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

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

    Sudo /etc/init.d/Apache2 restart
    
69
Rahul Chipad

Ваш .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]

Обратите внимание на «кодовый указатель» в двух местах.

после этого в вашем конфиге:

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

Измените codeigniter на "ci", где это уместно

5
jmadsen
<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
Vinilnbr

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

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

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

Мой config.php выглядит так (приложение/config / config.php )

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

Дайте мне знать, если это работает на вас, ребята тоже! Ура!

2
William Kheng

Я использую что-то вроде этого - 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

читать

2
Velja Matic

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

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

У меня была похожая проблема на Linux Ubuntu 14.

После постоянных 403 сообщений об ошибках в браузере и прочтения здесь всех ответов я так и не смог разобраться в чем дело.

Затем я обратился к журналу ошибок Apache и, наконец, получил подсказку, которая была немного неожиданной, но совершенно логичной.

главная папка codeIgniter не имела разрешения X для папки, что делает все остальное нечитаемым веб-сервером.

chmod ugo + x yourCodeIgniterFolder

исправлена ​​первая проблема. Погибло 403 ошибки.

Но потом я начал получать ошибку 500. 

Culprit был неправильной строкой настроек в .htaccess 

Тогда я начал получать ошибки PHP.

Culprit была той же проблемой, что и основная папка без флага X для разрешения «чужие» для внутренних папок в приложениях и системных папках.

Мои два цента на этот вопрос: ПРОЧИТАЙТЕ Apache Error.log. 

Но также следует помнить о проблемах безопасности. CodeIgniter предлагает переместить приложение и системную папку из веб-пространства, поэтому при изменении разрешений следует соблюдать осторожность, если эти папки остаются в веб-пространстве.

Здесь также стоит упомянуть, что я разархивировал загруженный архив CodeIgniter непосредственно в веб-пространство. Права доступа к папкам, скорее всего, создаются прямо из архива. Как дано, они безопасны, но проблема доступа к папкам (в unix-подобных системах) не упоминается в руководстве CodeIgniter https://codeigniter.com/user_guide/installation/index.html и, возможно, там должно быть упомянуто с рекомендациями о том, как ослабить безопасность для CodeIgniter, чтобы он работал, сохраняя безопасность для производственной системы (некоторые указания по безопасности уже есть в руководстве, как упоминалось ранее).

1
ljgww

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

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

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

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

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

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

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

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

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

1
Ahmed Abd ElHameed

По умолчанию ниже находится в папке application, переместите его, как предложено, в корневой каталог.

leave the .htaccess file in CI root dir

0
Cyber

Просто добавьте это в файл .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]
0
Siddharth Shukla