我正在做一个分为两个独立部分的项目。第一部分,也是更大的部分,在 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
.htaccess Laravel4Project 'public' 目录中的文件:
<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
另一个问题:
现在这里剩下的唯一问题是摆脱并从URL中删除"索引.php"。
有人可以帮我吗?
在等待了 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/otherRoute" 和域 "www.laravel4Project.dev"。这意味着我给出的URL是错误的,如下所示:
错误的网址
www.laravel4project.dev/billing/anotherRoute
只需在"/billing"之后添加"index.php"。因此,正确的URL如下所示:
正确的网址
www.laravel4project.dev/billing/index.php/anotherRoute
现在这里剩下的唯一问题是摆脱并从URL中删除"索引.php"。
有人可以帮我吗?
这正是我在许多天里遇到的,最后,我想出了如何解决它们。
您所需要的只是修改.htaccess文件和一些小的更改。
假设我有两个项目:项目 1 和项目 2。两个项目的结构(在/var/www 中(:
project1/__app/
|__bootstrap/
|__public/
|__blog/ (include css, js,...)
|__.htaccess
...
...
project2/__app/
|__bootstrap/
|__public/
|__shop/ (include css, js,...)
|__.htacess
...
...
首先,复制项目1中公用文件夹的所有内容,然后放入项目2的公用文件夹中。在项目 1 的公用文件夹中创建名为 blog2 的新文件夹,并将项目 1 的公用文件夹中的所有内容移动到文件夹 blog2。它将是这样的:
project1/__app/
|__bootstrap/
|__public/
|__blog2/
|__blog/ (include css, js, ...)
|__.htaccess
...
|__shop/ (include css, js, ...)
|__.htacess
...
....
接下来,编辑 .htaccess:项目1/../public/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]
文件项目1/../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]
最后,修改文件项目1/../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';
所以我不需要虚拟主机文件中的"别名"行。希望对您有所帮助。