如何在一个域或服务器上处理两个Laravel项目的路由?

时间:2015-12-18 13:19:21

标签: php apache .htaccess mod-rewrite laravel-routing

我正在研究一个分为两个独立部分的项目。第一部分,更重要的部分,在Laravel 4.2中。第二部分,较短的部分,在Laravel 5.两者都在同一台服务器上。

我的目标是访问和使用两个项目的路线,即项目1可以调用和访问项目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'别名允许我从Laravel4Project中访问Laravel5Project,而不在我的Laravel4Project的'routes.php'文件中声明'/ billing'路径。会话和身份验证很好。没问题,直到这里。

问题是'计费'别名指向Laravel5Project中的'/'根目录,而且我的Laravel5Project中还有一些其他路由,如下所示:

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

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

要访问Laravel5Project的'/'路径,我在Laravel4Project中提供了'/ billing'链接,它工作正常,让我访问Laravele5Project。但是当我在Laravel4Project中提供'/ billing / anotherRoute'或'/ anotherRoute'链接时访问Laravel5Project的'/ anotherRoute'都不起作用,Apache Server给我以下错误:

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 /',但它在Laravel5Project的'route.php'文件中。 '/ billing'本身不是一条路线,它只是一个'Alis'。

所以我的问题是如何从Laravel4Project中访问Laravel5Project的所有路径,反之亦然?

以下是Laravel4Project和Laravel5Project的.htaccess文件:

Laravel4Project根目录中的

.htaccess文件:

<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
Laravel4Project“public”目录中的

.htaccess文件:

<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>
Laravel5Project公共目录中的

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

编辑

我已经发布了我发现的答案。只是提供下面给出的URL解决问题。

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

另一个问题:

现在唯一的问题是摆脱并从网址中删除'index.php'。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

在等待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

请注意网址“/ billing / anotherRoute”和域名“www.laravel4Project.dev”。这意味着我给出的URL错误,如下所示:

错误的网址

www.laravel4project.dev/billing/anotherRoute

在“/ billing”之后添加“index.php”。所以正确的URL如下所示:

更正网址

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

现在唯一的问题是摆脱并从网址中删除'index.php'。

有人可以帮我解决这个问题吗?

答案 1 :(得分:0)

这正是我多天所面对的,最后,我想出了如何解决这些问题。
您只需要修改.htaccess文件和一些小的更改。
假设我有两个项目:project1和project2。两个项目的结构(在/ var / www中):

project1/__app/
    |__bootstrap/
    |__public/
            |__blog/ (include css, js,...)
            |__.htaccess
             ...
...
project2/__app/
    |__bootstrap/
    |__public/
             |__shop/ (include css, js,...)
             |__.htacess
              ...
...

首先,复制project1中公共文件夹的所有内容,然后将其放入project2的公共文​​件夹中。在project1的公用文件夹中创建名为blog2的新文件夹,并将project1的公用文件夹中的所有内容移动到文件夹blog2。它会是这样的:

project1/__app/
        |__bootstrap/
        |__public/
                |__blog2/
                        |__blog/ (include css, js, ...)
                        |__.htaccess
                        ...
                |__shop/ (include css, js, ...)
                |__.htacess
                ...
....

接下来,编辑.htaccess: PROJECT1 /../公共/ blog2 / .htacess:

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

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

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

file project1 /../ public / shop / .htaccess:

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

RewriteEngine On

# Base Rewrite Path...
RewriteBase /

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

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ /shop/index.php [L]

创建一个新的.htaccess并放在project1的公共文件夹中:

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

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(!shop*) /blog2/$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_URI} !shop
RewriteRule ^(.*)$ /blog2/$1 [L]

最后,修改文件project1 /../ public / shop / index.php:
之前:

require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';

后:

require __DIR__.'/../../../project2/bootstrap/autoload.php';
$app = require_once __DIR__.'/../../../project2/bootstrap/app.php';

所以我不需要排队&#39; Alias&#39;在虚拟主机文件中。希望它会对你有所帮助。