MyTetra Share
Делитесь знаниями!
Как совместить два разных фреймверка (CodeIgniter и Yii) если у них один и тот же стартовый файл index.php
Время создания: 22.09.2014 11:27
Текстовые метки: index.php, Yii, CI, CodeIgniter, одновременно
Раздел: Компьютер - Программирование - Язык PHP - Yii
Запись: xintrea/mytetra_syncro/master/base/14113708531de6zmveva/text.html на raw.github.com

Вопрос

Есть заготовка сайта, админка которого написана на CodeIgniter-2.

Я хочу потихоньку переползти на Yii, и для тренировки хочу сделать фронтэнд на Yii (версии 1.x.x), а бэкэнд оставить на CodeIgniter. Но есть загвоздка. И у CodeIgniter, и у Yii в качестве первичного скрипта используется index.php в корне сайта.

Я хочу сделать два скрипта: indexCi.php и indexYii.php. Нужно, чтобы при обращении к URL вида имяСайта/admin/... вызывалось выполнение indexCi.php, а при других урлах - indexYii.php. Вопрос: как это сделать?

Мне нужно понять, как это сделать на Apache2, а так же знать, можно ли настроить такое поведение на Nginx.

Текущий конфиг Апача (.htaccess) следующий:

AddType image/x-icon .ico

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Ответ 1

Примерно так:

Options +FollowSymLinks

#IndexIgnore */*

RewriteEngine on

# Make the backend accessible via url: http://site/backend.

RewriteRule ^admin admin.php

# If a directory or a file exists, use it directly.

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

# Otherwise forward it to index.php.

RewriteRule . index.php

где:
admin.php это точка входа CI
index.php это точка входа Yii

Ответ 2

Можно и через PHP, не обязательно через сервер:

$position=strpos($_SERVER['REQUEST_URI'], '/admin');

if($position===false)

require_once('./indexYii.php'); // Сам сайт

else

require_once('./indexCi.php'); // Админка

Такой код будет работать аналогично, или почти аналогично быстро серверу. Любой фреймворк для роутинга использует регулярки "в лоб", и скорее у тебя там будет узкое место, чем здесь.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования