Codeigniter - получение ошибки 404 Not Found

У нас есть два пакета хостинга в Godaddy. Наш веб-сайт работает отлично, используя следующий файл .htaccess. Веб-сайт доступен без использования index.php в URL-адресе.

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

Мы использовали тот же файл htaccess и тот же код на другом хостинге, который также является godaddy. Мы просто хотели сделать отдельные экземпляры производства и разработки отдельными. Но на другом хостинге с тем же кодом и файлом htaccess на веб-сайте отображается ошибка 404 страницы, но сайт отлично работает с index.php в URL-адресе.

У нас есть одна версия php на обоих серверах. Просто хочет знать, в чем проблема?

Ответ 1

Я также столкнулся с подобной проблемой, когда я переместил свой 100% рабочий код на выделенный сервер Debian. После 3 часов исследований я узнал, почему файл htaccess не работает. Вам нужно разрешить переопределение htaccess в конфигурации Apache.

Вот шаги.

Шаг 1:

Добавьте это в файл htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

Шаг 2:

Удалить index.php в configignign config

$config['index_page'] = '';

Шаг 3:

Разрешить переопределение htaccess в конфигурации Apache (команда)

sudo nano /etc/apache2/apache2.conf

и отредактируйте файл и измените его на

AllowOverride All

для папки www

Шаг 4:

Перезапустить Apache (Command)

sudo /etc/init.d/apache2 restart

Перед внесением любых изменений в файл apache2.conf обязательно сделайте резервную копию этого файла. Если вы используете сервер Debian, вы можете избежать команды sudo. Я считаю, что вы знаете, как подключиться к вашему серверу с помощью программного обеспечения ssh client, такого как putty. Комментарий ниже, если этот метод не работает для вас.

Ответ 2

Вы можете использовать это. Это работает для меня на ходьбе-хостинге.

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

Ответ 3

в index.php вы выполните эхо-тест и запустите. Затем вы можете проверить, вызвано это или нет. в журнале ошибок включения файла конфигурации. Сделайте вашу папку /application/logs доступной для записи. В /application/config/config.php установить. $config['log_threshold'] = 4;

проверить папку журнала /application/logs

Ответ 4

Попробуйте ввести все ваши контроллеры. Это устранит проблему для меня.

Ответ 5

попробуйте этот... он работает для меня..

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]

Ответ 6

У меня ограниченные знания в работе с серверами, но это должно дать вам несколько идей.

Сначала вы должны знать, что такое файл .htacess. вы можете проверить его здесь ссылка

.htaccess - это файл конфигурации для использования на веб-серверах, на которых выполняется Программное обеспечение Apache Web Server. Когда файл .htaccess помещается в каталог, который, в свою очередь, загружается через веб-сервер Apache, затем файл .htaccess обнаруживается и выполняется веб-сервером Apache программного обеспечения. Эти файлы .htaccess могут использоваться для изменения конфигурации программного обеспечения Apache Web Server для включения/отключения дополнительных функциональность и функции, которые программное обеспечение Apache Web Server должно предлагает. Эти средства включают базовую функциональность перенаправления для если возникла ошибка 404 файла, или для более продвинутых такие функции, как защита паролем содержимого или горячая ссылка изображения профилактика.

В основном .htaccess предоставляет вам разрешение на изменение конфигурации Apache Web Server. Вы получите разрешение с использованием .htacess, если в Apache включен mod_rewrite. Я не буду писать то, что эта 4 базовая строка в .htaccess может сделать в codeigniter, потому что вы можете найти ее в google. эта ссылка может дать вам приятную базовую информацию.

Теперь основная проблема:.htaccess не работает на вашем другом хостинге. Это возможно, потому что несколько причин:

  • По какой-то причине mod_rewrite отключен на вашем веб-сервере Apache. Если ваш хостинг - VPS или DS, возможно, вы еще не настроили его. Кто-то уже спрашивает, как включить mod_rewrite, вы можете перейти к этой ссылке. Если вы используете общий хостинг, попросите свой хостинг включить mod.rewrite в вашем хосте. Вы можете проверить, включен ли mod.rewrite или нет в вашем хостинге, следуя этой ссылке . Или вы можете просто проверить с помощью <?php phpinfo(); ?> и проверить "Загруженные модули" для mod_rewrite или нет. Пример в этом изображение.
  • Вы не используете Apache в качестве веб-сервера. Есть другие веб-сервер как NGINX и lighttpd. Вы должны спросить своего администратора сервера, какой веб-сервер вы используете в настоящее время. У меня нет опыта использования NGINX и lighttpd, поэтому я не могу вам помочь. Но, насколько я знаю. Код htaccess отличается в APACHE, NGINX и lighttpd. Вы можете попробовать конвертировать .htaccess код apache в код nginx в здесь или . К сожалению, для конвертации .htaccess в lighttpd я не могу найти какой-либо онлайн-конвертер, но есть официальный путеводитель здесь и здесь
  • Хорошо для полного совета, я напишу это. Возможно, вы не настраиваете codeigniter, чтобы не использовать index.php. В конфигурационном файле пустая конфигурация для index_page. и предоставить Base_url ваше доменное имя. $config['base_url'] = "yourdomainname.com"; $config['index_page'] = '';

Надеюсь, это ясно объясняет, почему ваш .htaccess не работал.

Ответ 7

Я столкнулся с подобной проблемой, когда я двигаюсь на сервере godaddy. И это работает для меня.

Добавьте этот код в ваш .htaccess файл.

<IfModule mod_rewrite.c>
    RewriteEngine On

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

   # Rewrite all other URLs to index.php/URL
   RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

</IfModule>
<IfModule !mod_rewrite.c>
       ErrorDocument 404 index.php
</IfModule>

В файле конфигурации:

$config['base_url'] = 'domain.com';
$config['index.php'] = '';

И Set AllowOverride to All в вашем httpd.conf

установите правильное разрешение в папке /cache, а не просто создайте папку для записи, вам нужно сделать ее доступной для записи.

Я надеюсь, что это сработает для вас.

Ответ 8

Следуйте этому

  • Создайте новый файл .htaccess в вашем объявлении public_html/Project
  • Вставьте следующий код

    RewriteEngine on
    RewriteBase /
    RewriteCond $1 !^(index\.php|resources|robots\.txt|static) [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/?$1 [L,QSA]
    

  • Дополнительно

Если вы можете ssh на сервере с помощью команды ssh [email protected]_address в командной строке либо Linux-терминал, либо Putty

username - это тот, который вам предоставлен GoDaddy, или вы можете использовать root

ip_address будет публичным IP-адресом вашего хоста, вы можете найти его на своей панели хостинга

Запустите команду sudo a2dissite 000-default

Команда отключает конфигурацию apache по умолчанию, которая обрабатывает запрос

Гудлак!

Ответ 9

Как вы упомянули здесь, на локальном хосте ваш код работает нормально, но когда вы переместили его на живой сервер, он вызывает ошибку 404. Там может быть несколько случаев, которые вам нужно проверить:

Шаг 1: Проверить, что mod_rewrite включен или нет в вашей конфигурации Apache

Шаг 2: Удалите index.php в configignign config, как предлагал @geordy

Вы можете проверить его на

<?php
echo 'Test'; die;
?>

в корневом index.php. Это гарантирует, что все ваши запросы должны проходить через эти файлы, иначе структура Codeigniter не будет работать должным образом.