【问题标题】:Laravel Symbolic Links Without Losing PrefixLaravel 符号链接不丢失前缀
【发布时间】: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 前缀无法用于定义路由。也许有一个设置可以启用此功能,但我们无法找到它。

所以我们有两种选择,但无法让其中任何一种发挥作用。

【问题讨论】:

    标签: php apache laravel lamp


    【解决方案1】:

    如果你想为 public 文件夹创建一个符号链接以避免 Laravel 项目上的 public 文件夹和你的“www”或 public_html 文件夹上的 public 文件夹之间的重复,你需要这样做: 输出项目名称为:test1-core

    因此,如果您扔掉本指南: https://medium.com/laravel-news/the-simple-guide-to-deploy-laravel-5-application-on-shared-hosting-1a8d0aee923e 您需要在“www”/public_html 文件夹下(1 级)有 1 个 laravel 项目文件夹。假设我们的 laravel 项目的名称是 test1-core。 现在根据指南,您需要将公共文件夹从 test1-core 复制到 www 文件夹。

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

    cd ~
    cd www
    

    第二次做链接:

    ln -s ../test1-core/public
    

    如果您使用的是共享主机,并且您的 www 文件夹中有多个文件夹,我建议您将链接命名为:

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

    链接此您将拥有 test1“链接文件夹”,您可以将域重定向到它。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 2020-09-25
      • 2021-01-28
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多