公共路径在生产中不起作用,但在本地中起作用

时间:2020-06-21 06:43:48

标签: laravel

public_path()在生产中对我不起作用,但在本地环境中有效。其他路径功能(应用,基本和存储)正常工作。

2 个答案:

答案 0 :(得分:1)

在Illuminate \ Foundation \ Application.php中,您将找到:

 /**
     * Get the path to the public / web directory.
     *
     * @return string
     */
    public function publicPath()
    {
        return $this->basePath.DIRECTORY_SEPARATOR.'public';
    }
}

basePath返回时,Laravel安装的基本路径...。

有时此路径无法按您的意愿使用,因此您必须将其覆盖... 请记住,您不能更改此类代码,因为它超出了您的项目代码... 您可以根据laravel的版本进行选择:

1-调整bootstrap / paths.php中的路径值

'public' => __DIR__.'/../public'

请参阅:

https://stackoverflow.com/a/27271590/10573560

2-您可以使用ioc容器覆盖公共路径:

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

laracast的讨论中有一些很好的建议,其中包含非常好的想法

答案 1 :(得分:0)

您必须在index.php中更改公用文件夹路径。
public folder on server

有时此文件夹称为public_html。典型的用户public html路径的示例是/home/user/public_html
因此,这些是您需要更改的四个最重要的文件,以便在自定义公用文件夹中运行应用程序:
./ server.php
该文件在根文件夹中。调用php artisan serve命令时,由本地PHP开发服务器使用。它具有公用文件夹的硬编码值。将此值更改为您的自定义路径(例如:public_html)。

if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
  return false;
}

require_once __DIR__.'/public/index.php';

./ app / AppServiceProvider.php

在此文件中,您可以注册并启动该应用程序的某些服务提供商。有一个名为register()的函数。通常,此部分默认情况下为空。您需要添加额外的代码来定义自定义应用程序路径。

public function register()
{
  $this->app->bind('path.public', function() {
    return base_path().'/public_html';
  });
}

./ config / filesystems.php
该文件定义了一些重要的文件系统位置,云文件系统的使用以及其他与文件相关的配置。修改public部分,将rootapp/public更改为所需的位置,例如app/public_htmlapp别名您的根文件夹)。

'public' => [
  'driver' => 'local',
  'root' => storage_path('app/public'),
  'url' => env('APP_URL').'/storage',
  'visibility' => 'public',
],

./ webpack.mix.js

(可选)某些Laravel安装程序使用Laravel Mix插件模块来使用Webpack npm插件生成javascript,css和其他前端文件的统一版本和最小版本。这些文件安装在公用文件夹中(例如./public/js./public/css/)。添加一行以更改默认的公用路径(mix.config.publicPath),然后在Laravel混合配置中将公用文件夹更改为所需的 public 文件夹名称。

mix.config.publicPath='public_html';
mix.js('resources/assets/js/app.js', 'public_html/js')
  .sass('resources/assets/sass/app.scss', 'public_html/css');

移动公用文件夹
将公用文件夹移动到另一个文件夹的最简单方法是使用move(mv)命令。之后,您的公用文件夹将立即重命名。

mv public public_html

refrence