【发布时间】:2015-12-18 13:19:21
【问题描述】:
我正在开展一个项目,该项目分为两个独立的部分。第一部分,更大的部分,在 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' 链接,它工作正常,让我可以访问 Laravel5Project。但是当我在 Laravel4Project 中提供 '/billing/anotherRoute' 或 '/anotherRoute' 链接时访问 Laravel5Project 的 '/anotherRoute' 都不起作用并且 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/' 但它在 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
另一个问题:
现在剩下的唯一问题是摆脱并从 URL 中删除“index.php”。
有人可以帮我解决这个问题吗?
【问题讨论】:
标签: php apache .htaccess mod-rewrite laravel-routing