Назад | Перейти на главную страницу

Как обрабатывать маршруты двух проектов Laravel в одном домене или сервере?

Я работаю над проектом, разделенным на две отдельные части. Часть первая, большая часть, находится в Laravel 4.2. Вторая часть, более короткая, находится в Laravel 5. Оба находятся на одном сервере.

Моя цель - получить доступ и использовать маршруты обоих проектов, т.е. Project 1 может вызывать и получать доступ к маршрутам Project 2 и наоборот.

Для доступа к обоим проектам я использую следующий файл виртуального хоста:

<VirtualHost *:80>
    ServerAdmin m.khuramj@live.com
    DocumentRoot /var/www/Laravel4Project/public

    ServerName www.Laravel4Project.dev
    Alias /billing /var/www/Laravel5Project/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/Laravel4Project/public/>
        AllowOverride All
    </Directory>
</VirtualHost>

Псевдоним «/ billing» в приведенном выше файле позволил мне разрешить доступ к Laravel5Project из Laravel4Project без объявления маршрута «/ billing» в моем файле «routes.php» Laravel4Project. Сессии и аутентификация в порядке. Пока здесь нет проблем.

Проблема в том, что псевдоним биллинга указывает на корень '/' в Laravel5Project, и в моем Laravel5Project есть некоторые другие маршруты, как показано ниже:

Route::get('/', function() {
    return 'Laravel 5 Project';
}

Route::get('/anOtherRoute', function() {
    return 'Another Route from Laravel 5 Project';
}

Чтобы получить доступ к маршруту «/» Laravel5Project, я предоставляю ссылку «/ billing» в моем Laravel4Project, которая отлично работает и позволяет мне получить доступ к Laravele5Project. Но для доступа к '/ anotherRoute' Laravel5Project, когда я предоставляю ссылку '/ billing / anotherRoute' или '/ anotherRoute' в Laravel4Project, оба не работают, и сервер Apache выдает мне следующую ошибку:

Not Found
    The requested URL /billing/anotherRoute was not found on this server.
    Apache/2.4.12 (Ubuntu) Server at www.laravel4project.dev Port 80

Я знаю, что это потому, что в моем Laravel4Project нет маршрута '/ billing / antohterRoute /', но он находится в файле 'route.php' Laravel5Project. Сам по себе / billing не является маршрутом, это просто псевдоним.

Итак, мой вопрос: как я могу получить доступ ко всем маршрутам Laravel5Project из Laravel4Project и наоборот?

Ниже приведены файлы .htaccess как Laravel4Project, так и Laravel5Project:

Файл .htaccess в корневом каталоге Laravel4Project:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond  %{REQUEST_URI}  !^/mm.*$
    RewriteRule ^(.*)$ public/$1 [L,QSA]

    RewriteCond  %{REQUEST_URI}  ^/mm.*$
    RewriteRule ^/mm/(.*)$ public/mm/$1 [L,QSA]
</IfModule>
AddDefaultCharset utf-8

Файл .htaccess в публичном каталоге Laravel4Project:

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

    RewriteEngine On

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Файл .htaccess в общедоступном каталоге Laravel5Project:

<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
    RewriteRule ^ index.php [L]
</IfModule>

После долгого ожидания ответа от сообщества Laravel и обмена стеками я не смог получить ответ.

Но я также продолжал пытаться найти решение, и вот оно:

Если вы заметили в вопросе выше, я упомянул, что Apache выдает мне следующую ошибку:

Not Found
The requested URL /billing/anotherRoute was not found on this server.
Apache/2.4.12 (Ubuntu) Server at www.laravel4project.dev Port 80

Обратите внимание на URL-адрес / billing / anotherRoute и домен www.laravel4Project.dev. Это означает, что URL-адрес, который я давал, был неправильным, как указано ниже:

Неправильный адрес

www.laravel4project.dev/billing/anotherRoute

Просто добавьте index.php после / billing. Таким образом, правильный URL-адрес будет таким, как указано ниже:

Правильный URL

www.laravel4project.dev/billing/index.php/anotherRoute

Теперь осталась единственная проблема - избавиться и удалить index.php из URL.

Может ли кто-нибудь помочь мне в этом?