2015-08-17 3 views
0

Я использую Codeigniter 3. При работе на локальном сервере Wamp все хорошо. Но при работе на моем VPS (Linux Debian Apache 2.2.22) я получаю сообщение «URL not found».Codeigniter не может найти контроллер

здесь контроллер:

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

    class Contact extends CI_Controller { 
     public function __construct() 
     { 
     parent::__construct(); 
     $this->load->helper('url'); 
     $this->load->library('session'); 
     $this->load->helper('form'); 
    } 

    public function index() 
    { 
     $this->load->view('contact_view'); 
    } 
    } 

Мой URL для этого контроллера www.example.com/Contact

сообщение об ошибке:

Запрошенный URL /index.php/Контакт не найден на этом сервере.

Я удалил index.php из $config['index_page'] = ''

В моем файле .htaccess, я использую переписывают в eleminite необходимость index.php в URL-адресов, с помощью этого:

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

директивы на моем виртуальном хосте являются:
<Directory "/var/www/example"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>

mod_rewrite является défini tely включен на виртуальном хосте.

Все работает нормально на моей локальной машине, работает Wampserver, но почему это не работает на моем VPS?

+0

Если вы помещаете случайные символы в верхнюю часть вашего файла htaccess, вы получаете ошибку 500? – rjdown

+1

RewriteRule^(. *) $ Index.php?/$ 1 [L] - попробуйте с этим ... (вопросительный знак после index.php) - это помогло мне на некоторых серверах/хостах ... Даже здесь некоторые плакаты упомянули об этом ... http://forum.codeigniter.com/thread-1236.html – sinisake

+0

Да - на обоих серверах –

ответ

3

Для Codeigniter 3 мне пришлось заглавные буквы первой буквы имени контроллера. Например, я изменил main.php на Main.php и исправил его для меня.

Обратите внимание, что мне не нужно было делать это на моем ноутбуке с локальными окнами, но я должен был сделать это на сервере unix-сервера hostgator.

1
RewriteRule ^(.*)$ index.php?/$1 [L] 

Вопросительный знак после index.php - это решение ... Тем не менее, я хотел бы получить некоторые объяснения. Я знаю по опыту, что некоторые серверы требуют этого, но не знают точной причины.

+0

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

+0

Попробуйте добавить 'Options -Multiviews' перед правилами перезаписи. Очевидно, что правила перезаписи работают, но если опция Multviews включена на вашем VPS, вы столкнетесь со всеми проблемами – Capsule