2016-02-29 4 views
1

Я разработал веб-приложение с использованием Xampp и CodeIgniter. Лучшим способом обработки чистой маршрутизации было установить VirtualHost для указания в папке, содержащей проект, в файле xampp/apache/conf/httpd.conf, затем с использованием маршрутов маршрутизации в файле route.php, напримерКонтроллеры CodeIgniter недоступны

$route['page1'] = "Page1Controller/page1Function"; 

Я использую HREF или заголовок, как это с помощью корня как основной папки:

href="/page1" 

Все, что очень хорошо работает на местном уровне, и я никогда не использую base_url() или такие функции.

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

Я пробовал base_url(), но он не работает, страницы не найдены, даже если вы не используете $route.

Есть ли способ справиться с этим без рефакторинга всех ссылок в коде или как это сделать с рефакторингом?

EDIT

Вместо использования "/page1", я теперь с помощью "./page1" для доступа к расположению папки index.php. Тем не менее, я все еще не могу получить доступ к другим страницам ни с php, ни с html/js.

+0

Вы также можете поделиться своим файлом .htaccess? Кстати, работает домашняя страница или нет? –

+0

убедитесь, что имя контроллера запущено с большой буквы, например, «home.php» следует называть «Home.php» и оставить 'base_url()' пустым. – Dray

+0

@Dray Я уже сделал это, спасибо. Я отредактирую свой вопрос – user3311142

ответ

1

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

1 - Первая заглавная буква на контроллерах и представлениях

CodeIgniter запрашивает использование заглавных букв в наименовании контроллеров и представлений, так что даже если маршрутизация работает на Windows, Linux чувствительность к регистру требует право именования как в заголовке класса, так и в ссылке в файле routes.php.

2 - Использование './' вместо '/'

Поскольку развертывание приложения происходит в подобласти, корень соответствует самой области, а не в подобласти, где index.php проживает и который доступен с './'(cf. SO question).

3 - жестко прописывать подобласть путь в файле .htaccess

После этого doc, я выполнил шаги, чтобы исправить стандартный файл .htaccess, чтобы заставить его работать с подкаталогом на сервере.Стандартный вариант просто удалить '/' из этого правила:

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

, что приводит к

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

Однако это не решает его на моем сервере, я должен был жёстко путь:

Если вы работаете в EE из поддиректории и он по-прежнему не работает после удаления слэш, возможно, потребуется указать поддиректорию в ваше правило перезаписи. Например, если ваша подпапка называется тестирование, изменения:

RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

To:

RewriteRule (.*?)index\.php/*(.*) testing/$1$2 [R=301,NE,L]

И изменение:

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

To:

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

Смежные вопросы