【发布时间】:2015-07-29 20:40:30
【问题描述】:
希望有人以前遇到过这种情况,因为我们还没有找到解决方案。
目前,我们在服务器的根目录 (/home/username) 上安装了两个不同的框架。其中之一是用于提供非常快速的 API 的微框架。另一个是 Laravel。与本题相关的目录路径如下:
-
/home/username/public_html(服务器可公开访问 目录) -
/home/username/microframework/public(公用文件夹 对于微框架) -
/home/username/laravel-project/public( 我们 Laravel 项目的公共文件夹)
我们的目标是能够提供多个前缀,这些前缀可以路由到适当的框架。例如
www.domain.com/api/login --> goes to route /api/login on the micro framework
www.domain.com/account/login --> goes to route /account/login on Laravel
www.domain.com/admin/login --> goes to route /admin/login on Laravel
尝试 #1
我们尝试的第一件事是使用符号链接将流量引导到不同的框架
ln -s /home/username/microframework/public/api /home/username/public_html/api
ln -s /home/username/laravel-project/public/account /home/username/public_html/account
ln -s /home/username/laravel-project/public/admin /home/username/public_html/admin
然后在 Laravel 的 routes.php 文件中,我们有
Route::get('/account/login', 'AccountController@showLogin');
Route::get('/admin/login', 'AdminController@showLogin');
我们遇到的问题是我们在使用这个策略时遇到了 403 和 404 错误。
You don't have permission to access /account/login on this server
似乎不允许我们创建指向虚假目录的符号链接(因为 /home/username/laravel-project/public/account 和 /home/username/laravel-project/public/admin 不存在)。我原以为这是可能的,但似乎不可能。
尝试 #2
作为替代方案,我们尝试了以下方法。我们创建了直接指向框架公用文件夹的符号链接。
ln -s /home/username/microframework/public /home/username/public_html/api
ln -s /home/username/laravel-project/public /home/username/public_html/account
ln -s /home/username/laravel-project/public /home/username/public_html/admin
这可行,但是,我们从路由中丢失了 /account 和 /admin 前缀。我们的 Laravel routes.php 只有在它看起来像这样的情况下才有效:
Route::get('/login', 'AccountController@showLogin');
//Route::get('/login', 'AdminController@showLogin'); // this causes conflict since the /login route is already defined
您似乎无法根据公用文件夹之前的 url 进行过滤,因此 /account 和 /admin 前缀无法用于定义路由。也许有一个设置可以启用此功能,但我们无法找到它。
所以我们有两种选择,但无法让其中任何一种发挥作用。
【问题讨论】: