如何更改Lumen中的Public目录路径?

How to change the Public directory path in Lumen?

默认情况下,Lumen "same as Laravel"myApp/public 目录来放置所有 public 文件(资产)。

我想将该目录路径从 myApp/public 更改为 myApp/src/custom/public。我怎样才能做到这一点?

我相信你应该 "point" 你的 vhost 到新位置(假设你 moved/renamed public 目录到你想要的路径)。仅当您的服务器尚未以这种方式配置时才需要。

然后从您的新位置打开 index.php 和 "fix" 到 bootsrap/app 的路径。php

然后从 Lumen 基础目录打开 server.php 并在您发现 "public" 提到的两个位置编辑路径。

没有真正对此进行测试,但看起来应该可以。试一试。

您可以像这样使用 IoC 容器覆盖 public 目录:

App::bind('path.public', function()
{
    return base_path().'/public_html';
});

但我更喜欢使用指向 public 文件夹的符号链接,如下所示:

ln -s public public_html

遇到同样的问题,解决了。看,说不定对你有帮助。 我已经为我的 Lumen 应用程序完成了这个解决方案,它对我有用。

更新

好的,让我们继续进行一些更改以使系统与您的树一起工作。

  1. 在应用程序的根目录 myApp\ 中添加一个 .htaccess 文件。写在 :

    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
    RewriteRule ^ %1 [L,NE,R=302]
    RewriteRule ^((?!public/).*)$ src/custom/public/ [L,NC]
    

假设您已经配置了指向 \Path\myApp 的虚拟主机,我们现在访问 myApp\src\custom\public\ 的索引文件。如果我们没有犯任何错误,那么我们应该到达一个指示错误的页面,告诉我们找不到 bootstrap/app.php 文件。逻辑。

  1. 因此我们必须更改目录 myApp\src\custom\public 中的 index.php 文件:

    由此变化:

    $app = require __DIR__.'/../bootstrap/app.php';
    

    对此:

    $app = require __DIR__.'/../../../bootstrap/app.php';
    

您现在可以直接从想要的路径获取您的主页。

我也为此苦苦挣扎,并在其他地方找到了解决方案。

我想要以下目录结构:

.hosting root dir
 ├── lumen_app_dir <---
 ├── other_app_dir
 ├── etc...
 └── public_html
     └──lumen_app_public_dir <---

所以我做了以下事情:

  1. 已将 index.php.htaccesslumen_app_dir/public 复制到 lumen_app_public_dir
  2. 像这样更改了 index.php

    $app = require __DIR__.'/../../lumen_app_dir/bootstrap/app.php';
    
    $app->run($app['request']);
    

    这里重要的部分是,我必须包含 $app['reqest'] 作为 运行 函数的参数。

并且它在默认 .htaccess 文件中没有任何更改就可以正常工作。我可以在 server.dev/lumen_app_public_dir

访问 Lumen 安装

一种解决方案是在 appServiceProvider.php 注册方法中绑定来自 public 的路径:

$app->bind('path.public', function() {
     return __DIR__;  });

一个可靠的方法是进入你的 public_html/index.php! 我正在使用 Lumen 6.x,它工作正常。