【问题标题】:How to change the Public directory path in Lumen?如何更改 Lumen 中的公共目录路径?
【发布时间】:2015-08-27 16:18:57
【问题描述】:

默认情况下,Lumen “与 Laravel 相同”myApp/public 目录来放置所有公共文件(资产)。

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

【问题讨论】:

  • 为什么不感兴趣要更改公共目录的位置?
  • 是的,我想更改公共目录的位置。因为我将有多个公共目录。我希望我的应用程序从不同的公共目录动态加载,(例如,如果请求子域是 app1.localhost 我想加载 /src/app1/public 的公共目录)。

标签: lumen


【解决方案1】:

我相信您应该将您的虚拟主机“指向”新位置(假设您将公共目录移动/重命名为您想要的路径)。仅当您的服务器尚未以这种方式配置时才需要这样做。

然后从新位置打开 index.php 并“修复”bootsrap/app.php 的路径

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

并没有真正测试这个,但看起来它应该可以工作。试试看吧。

【讨论】:

  • 我要动态设置公共目录。因为我将有多个公共目录app-1/src/custom/publicapp-2/src/custom/public,当我调用子域app1.something.com 时,我想查找app-1/src/custom/public 的公共目录,这同样适用于app2。我能够通过路线和视图做到这一点。但尚未与公共目录。
  • 我还是会走这条路,但是应该重写 server.php 以匹配您的子域逻辑。它需要检查请求的文件是否存在于正确的目录中,并且需要正确目录中的 index.php 文件。
【解决方案2】:

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

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

但我更喜欢像这样使用指向公共文件夹的符号链接:

ln -s public public_html

【讨论】:

  • 你的回答是合乎逻辑的,我一直在到处尝试,但仍然无法在 Lumen 中工作。至于第二种解决方法,它仍然是一个选项,但我不喜欢这样做,而是让应用程序本身而不是系统管理员来处理。
【解决方案3】:

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

更新

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

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

    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
    RewriteRule ^ %1 [L,NE,R=302]
    RewriteRule ^((?!public/).*)$ src/custom/public/$1 [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';
    

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

【讨论】:

  • 这似乎是解决方案。但是我试过了,没有用!!您能否编辑答案并包含您的.htaccess 文件的完整副本。它可能会有所帮助。还是谢谢。
  • 好的。我刚刚对我的答案进行了彻底的检查:)
  • 这真是太棒了。请注意其他人,此答案不适用于 php artisan serve 命令。您需要配置您使用的服务器并将其指向应用程序的根目录。
【解决方案4】:

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

我想要以下目录结构:

.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 安装

【讨论】:

  • 我忘了说我在共享主机上,所以无法控制虚拟主机公共目录。
【解决方案5】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2017-11-11
    相关资源
    最近更新 更多