Laravel符号链接没有丢失前缀

时间:2015-05-18 11:07:32

标签: php apache laravel lamp

希望之前有人遇到此问题,因为我们还没有找到解决方案。

目前,我们在服务器的根目录(/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

您似乎无法根据公共文件夹的网址进行过滤,因此/account/admin前缀无法定义路由。也许有一个设置可以实现这一点,但我们无法找到它。

所以我们有两个选择,但是无法让任何一个工作。

1 个答案:

答案 0 :(得分:0)

如果要为公用文件夹创建符号链接,以避免Laravel项目上的公用文件夹与您的公共文件夹之间出现重复,并且#34; www"或者你需要这样做的public_html文件夹: 项目名称为:test1-core

所以,如果你去扔这个指南: https://medium.com/laravel-news/the-simple-guide-to-deploy-laravel-5-application-on-shared-hosting-1a8d0aee923e 你需要在(1级以上)你的" www" / public_html文件夹下有1个laravel项目文件夹。让我们说我们的laravel项目的名称是test1-core。 现在,通过指南,您需要将公共foler从test1-core复制到www文件夹。

我们需要做的是创建一个与linux的符号链接,以避免重复。下次执行git pull时,您不需要将公用文件夹复制到www文件夹。 首先" cd"到您的www fodler:

cd ~
cd www

第二个链接:

ln -s ../test1-core/public

如果您在共享主机上并且www文件夹中有多个文件夹,我建议将链接命名为

ln -s ../test1-core/public test1

链接这个你将有test1"链接文件夹"并且您可以将域重定向到它。

Godd luck。