Живой сервер показывает ошибку 404, но не на локальном, codeigniter 3 - PullRequest
3 голосов
/ 11 апреля 2019

У меня есть четыре идентичные страницы, которые отличаются только некоторыми идентификаторами, но логика очень похожа.Все они работают на localhost.Три из этих страниц работают нормально на живом сервере, но одна из них возвращает 404. По некоторым причинам, которые я не могу понять.

Я использую XAMPP 3.2.2 и Sublime для разработки его на локальном компьютере.Я переместил его в GoDaddy Deluxe Linux для жизни.Моя версия Codeigniter 3.1.10.

Я уже попробовал ответы на большинство вопросов в StackOverflow:

  1. Первые буквы всех названий контроллеров и моделей заглавные вимя файла и внутри файла.

  2. Все коды .htaccess здесь: https://github.com/tasmanwebsolutions/htaccess_for_codeigniter

  3. У меня есть два файла .htaccess, один из нихнаходится внутри папки приложения, а один снаружи.Я не знаю, если это сбивает с толку систему?Но у меня есть другой веб-сайт на другом хостинге с теми же файлами .htaccess, и они работают нормально.И вообще, если это сбивает с толку систему, почему она затрагивает только одну из четырех идентичных страниц?

.htaccess вне папки приложения

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

.htaccess внутри папки приложения:

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

Все контроллеры четырех файлов имеют верхнюю часть:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//session_start(); //we need to call PHP's session object to access it through CI

class Question1 extends CI_Controller
{

, а остальное - обычный код, который работает с тремя из этих четырех файлов.

В конфиге.php У меня есть:

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

и base_url - отлично.

Насколько я могу видеть, с моделями и представлениями все в порядке, а остальная часть сайта работает нормально свключенный .htaccess.Мои маршруты тоже хорошо работают.

Я так потерян сейчас.

PS.У меня есть пользовательская страница 404.Когда я ввожу Assessment.com/index.php/question1, он показывает эту пользовательскую страницу 404.Но когда я открываю Assessment.com/question1, он показывает собственную страницу 404 codeigniter (по некоторым причинам не мою).Я думаю, что это что-то говорит, я просто не знаю, что.

РЕДАКТИРОВАТЬ

Вот мои маршруты. Php:

$route['default_controller'] = 'home';
$route['404_override'] = 'Error404';
$route['translate_uri_dashes'] = TRUE;

Я выбралне делать $ route ['question1'] = "Question1";в маршрутах, потому что это ничего не меняет.

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Проверьте ваш режим приложения среды.Вы можете найти его в вашем проекте root_folder / index.php и в строке №.57.

define('ENVIRONMENT', 'production');

Измените режим ОКРУЖАЮЩЕЙ СРЕДЫ на режим разработки, то есть

define('ENVIRONMENT', 'development');

Затем снова обновите свои приложения.Если вы видите ошибку CodeIgniter по умолчанию, вы можете понять, что ваше приложение CodeIgniter работает нормально и проверить ошибку. Если оно не показывает никакой ошибки, значит, ваш .httaccess имеет какую-либо ошибку.Я решил эту ошибку 404 с этим кодом, вы можете проверить это.

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^asset.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
0 голосов
/ 15 апреля 2019

Ответ на этот вопрос для тех, кто может столкнуться с той же проблемой.

Хорошо, так что пользователь «Не паникуй» предложил мне повторить «вопрос х» в проблемном контроллере, и когда я это сделал, 404ошибка ушла и повторила «вопрос х».Так что, безусловно, проблема связана с моим контроллером, а не с моей программой или файлами .htaccess.

Теперь этот контроллер спроектирован таким образом, что сначала он вызывает идентификатор из базы данных, прежде чем что-либо показывать.После того, как я повторил «вопрос x», я понял, что идентификатор, который он вызывает из моей базы данных, имеет значение ноль.Поэтому неудивительно, что с точки зрения контроллера страница не существует!Следовательно, 404.

Я исправил это сейчас, обновив эту таблицу из моей базы данных и присвоив идентификатору значение, которое он должен был иметь во-первых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...