希望之前有人遇到此问题,因为我们还没有找到解决方案。
目前,我们在服务器的根目录(/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
前缀无法定义路由。也许有一个设置可以实现这一点,但我们无法找到它。
所以我们有两个选择,但是无法让任何一个工作。
答案 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。