在主网站的 select 子目录中部分集成 Laravel 框架

Partially integrating the Laravel Framework in select sub-directories of a main website

我最近问了 并收到了一些很好的答案,但我意识到这不是一个正确的问题。

我们目前使用的 CMS 可以满足我们网站 95% 的需求,但是对于额外的 5%,我想引入一个 PHP 框架来处理表单 Processing/Validation 、身份验证等。我最初的问题是,是否有可能在我们的站点中有一个子目录来管理所有这些项目。但现在我意识到这种方法需要所有东西都在类似 .../projects URI 的东西中,破坏了我们现在使用 CMS 的一个非常好的 REST 设置(我想要管理的唯一路由是在我自己的应用程序中,而不是整个站点来解决这个问题。

是否可以将Laravel的主文件夹放在根目录下,只包含在我想要的特定子目录或文件中。我想象它就像有多个 public 文件夹,我不确定它是否是 possible/reccommended?我还想象我必须从根本上关闭 Laravel 的路由,这样它就不会踩到 CMS 的脚趾,但我相信我可以为每个文件夹重新打开它,每个文件夹都有自己的 .htaccess?

我想象的架构看起来像这样:

         root
        /   \
      html  laravel
      /   \
     ...   [normal page]
    /   \              \
   /     \              [project] 
[project] [normal page]

我读到一点,Zend Framework 是专门为这样的部分集成而制作的,在这种情况下,如果它更适合这项工作,我绝对可以切换。但是,如果 Laravel 可以做到这一点,那就太好了,因为我已经对基础知识相当满意了。

您应该能够很容易地做到这一点。基本步骤包括:

  • 修改您的 .htaccess 或 vhost 文件,使 Laravel 托管的每个位置都指向 Laravel 的 public/index.php。您需要首先放置这些更具体的规则,因为 Apache 将遵循它找到的第一个匹配规则。
  • [可选]如果要更改 Laravel 项目的文件夹结构,请修改 bootstrap 文件夹中的文件(paths.php、autoload.php 和start.php) 以指向正确的路径,并确保 public/index.php(或您放置的任何位置)可以找到自动加载和启动文件。
  • 应该是这样。确保您的 Laravel 路由引用完整路径。

不幸的是,这种方法确实意味着您需要为每个要添加的 Laravel 路由添加一个重写规则。这样,Laravel 就不会干扰您的 CMS 的路由;它只会处理重写到 index.php 的请求。您只需确保重写规则具有更高的优先级,方法是将它们放在 CMS 的一般重写规则之前。