默认情况下,Lumen “与 Laravel 相同”具有myApp/public
放置所有公共文件(资产)的目录。
我想将该目录路径从更改myApp/public
为myApp/src/custom/public
. 我怎样才能做到这一点?
默认情况下,Lumen “与 Laravel 相同”具有myApp/public
放置所有公共文件(资产)的目录。
我想将该目录路径从更改myApp/public
为myApp/src/custom/public
. 我怎样才能做到这一点?
我也为此苦苦挣扎,并在其他地方找到了解决方案。
我想要以下目录结构:
.hosting root dir
├── lumen_app_dir <---
├── other_app_dir
├── etc...
└── public_html
└──lumen_app_public_dir <---
所以我做了以下事情:
index.php
将和.htaccess
from复制lumen_app_dir/public
到lumen_app_public_dir
.像这样改变了index.php
那里:
$app = require __DIR__.'/../../lumen_app_dir/bootstrap/app.php';
$app->run($app['request']);
这里重要的部分是,我必须将其$app['reqest']
作为运行函数的参数。
它只是在默认.htaccess
文件中没有任何更改的情况下工作。我可以在以下位置访问 Lumen 安装server.dev/lumen_app_public_dir
您可以使用 IoC 容器覆盖您的公共目录,如下所示:
App::bind('path.public', function()
{
return base_path().'/public_html';
});
但我更喜欢像这样使用指向公共文件夹的符号链接:
ln -s public public_html
遇到了同样的问题,解决了。看这里,也许它会对你有所帮助。我已经为我的 Lumen 应用程序完成了这个解决方案,它对我有用。
更新
好的,让我们进行一些更改以使系统与您的树一起工作。
.htaccess
在应用程序的根目录中添加一个文件,以便在目录myApp\
中。写在:
RewriteEngine On
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ src/custom/public/$1 [L,NC]
假设您已将 vhost 配置为指向\Path\myApp
,我们现在加入myApp\src\custom\public\
. 如果我们没有犯任何错误,那么我们应该进入一个指示错误的页面,告诉我们bootstrap/app.php
找不到文件。逻辑。
因此,我们必须更改目录中的 index.php 文件myApp\src\custom\public
:
从此改变:
$app = require __DIR__.'/../bootstrap/app.php';
对此:
$app = require __DIR__.'/../../../bootstrap/app.php';
您现在可以直接从所需路径获取您的主页。
我相信您应该将您的虚拟主机“指向”新位置(假设您将公共目录移动/重命名为您想要的路径)。仅当您的服务器尚未以这种方式配置时才需要。
然后从新位置打开 index.php 并“修复” bootsrap/app.php 的路径
然后从 Lumen 基本目录打开 server.php 并在您发现提到的“公共”两个位置编辑路径。
没有真正对此进行测试,但看起来它应该可以工作。试试看。
一种解决方案是在 appServiceProvider.php 注册方法中绑定 public 的路径:
$app->bind('path.public', function() {
return __DIR__; });
一个可靠的方法是进入你的 public_html/index.php!我正在使用 Lumen 6.x,它工作正常。