Запуск нескольких веб-сайтов с вложенными папками в одной отдельной папке

#php #.htaccess #codeigniter #mod-rewrite #laravel

#php #.htaccess #codeigniter #мод-переписать #laravel

Вопрос:

У меня есть основной веб-сайт (example.com ). Я использую там фреймворк CodeIgniter.

Я также буду использовать несколько разных вложенных папок, таких как example.com/sub1 , example.com/sub2 . Я использую здесь фреймворк Laravel, и они будут полностью отличаться от example.com и хранится в другой папке. Когда я запускал первый поддомен, я использовал Alias конфигурацию Apache2, и она работала отлично. Однако теперь мне нужно использовать вторую вложенную папку. Я добавил второй Alias sub2 в конфигурацию Apache, который указывает на тот же каталог, что и sub1. Затем я изменил свой .htaccess на это:

 <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond $1 !^(img|js|css)
    RewriteCond %{REQUEST_URI} (/evim)
    RewriteRule ^ /evim/index.php [L]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond $1 !^(img|js|css)
    RewriteCond %{REQUEST_URI} (/crm2)
    RewriteRule ^ /crm2/index.php [L]
</IfModule>
  

Теперь все работает нормально. Оба example.com/sub1 и example.com/sub2 запускает одно и то же приложение. Однако в Laravel трудно найти, какой поддомен запущен в данный момент. В маршрутах приложение не видит имя вложенной папки. Например, если я использую users/login route , то он соответствует обоим example.com/sub1/users/login и example.com/sub2/users/login . Мне нужно определить маршруты с именем вложенной папки.

Я ищу решение в htaccess или Laravel для исправления маршрутов.

Комментарии:

1. В codeigniter я нахожу лучший способ — создать подкаталоги. вызывается Admin или каким-либо другим именем, которое вы хотите для серверной части со своим собственным index.php и папка приложения. и еще одна папка под названием catalog основной index.php будет использовать каталог в качестве папки приложения. Если вы хотите создать библиотеки для обоих каталогов, поместите их в папку systems lib. Это работает, я делаю похожий, все, что сделано, просто работая над безопасностью администратора, и я нахожу, что чем меньше возиться с htacess, тем лучше.

2. example.com использует CodeIgniter, однако приложение вложенной папки использует Laravel. Я хочу, чтобы они были полностью разделены в файловой системе.

3. Я бы просто попытался придерживаться одного фрейма

Ответ №1:

Я бы использовал этот шаблон (как поддомены), и, возможно, это может избежать проблем.

 http://site1.foo.com http://site2.foo.com
  

В маршруте CodeIgniter.php вы можете сделать следующее:

 $server_link = explode(".", $_SERVER["HTTP_HOST"]);

if ( $server_link[0] == "site1" )
{
   $route['default_controller'] = 'home';
   // Some Other Routes
}
  

Я думаю, вы можете сделать то же самое для маршрутов Laravel.

Комментарии:

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

Ответ №2:

Раньше я Request::server('HTTP_HOST') получал, какой сайт загружен.