web-dev-qa-db-ja.com

laravel 5でパブリックフォルダーをpublic_htmlに変更する方法

コントロールパネルとしてcPanelを使用し、cPanel内で共有ホスティングを使用していますpublic_htmlがデフォルトのルートディレクトリです。このため、Laravelアプリケーションが正常に動作しません。

Laravel use public_htmlパブリックフォルダーの代わりに?

38
Ravexina

簡単な検索でこれを見つけるのはとても簡単です。

参照: https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5

Index.phpに次の3行を追加します。

_/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/

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

// set the public path to this directory
$app->bind('path.public', function() {
    return __DIR__;
});
_

編集:


Burak Erdemが述べたように、別のオプション(より望ましい)は、これを_\App\Providers\AppServiceProvider_ register()メソッドに入れることです。

_/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    // ...

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

ロバートの_index.php_ソリューションが機能しない場合は、Application Service Provider (App\Providers\AppServiceProvider.php)で次のコードを登録することもできます。

_<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

public function register()
{
    $this->app->bind('path.public', function() {
        return base_path().'/public_http';
    });
}
_
19
Burak Erdem

サーバー

トピックで説明されているメソッドはうまく機能しているため、App\Providers\AppServiceProvider.phpのmodyfingメソッドがジョブを実行する必要があります。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

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

ローカルphpアーティザンサービス開発

ただし、もう1つ問題があります。ローカルマシンでアプリを開発していて、php artisan serveコマンドを使用してアプリを提供している場合は、上記の構文のみでアプリを中断します。メインディレクトリにあるserver.phpファイルを調整する必要があります。その内容を編集し、/publicの各出現箇所を/public_htmlに置き換えます。したがって、次のようになります。

<?php

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <[email protected]>
 */

$uri = urldecode(
    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);

// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
    return false;
}

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

その後。サーバーを停止し、php artisan serveでリロードするだけです。

フロントエンドlaravel-mix開発

Webpackとlaravel-mixを使用してcssファイルとjsファイルを生成している場合は、更新も必要です。 webpack.mix.jsを調整しないと、npm run watchまたはnpm run productionで次のような結果になります。

.
..
public
  _html
    js
  public_html
    css
public_html

そのため、コードが台無しになります。これを明確にするには、webpack.mix.jsファイルへのパブリックパスを提供する必要があります。次のようになります。

const mix = require('laravel-mix');

mix.setPublicPath('public_html/');
mix.js('resources/js/app.js', 'js')
mix.sass('resources/sass/app.scss', 'css');

これにより、パブリックディレクトリのデフォルト定義がpublicからpublic_htmlに変更され、次の行がsetPublicPath値への相対パスを提供します。

ハッピーコーディング。

4
David

これらの回答はlaravel 5.5では機能しませんでしたが、独自の方法で解決できます。

手順1:パブリックファイルを除くすべてのファイルをサーバーのメインディレクトリに破棄します。

ステップ2:サーバー上のpublic_htmlファイルへのパブリックファイル。

手順3:public.htmlからindex.phpファイルを取得し、次のように変更します。

ステップ3A:

元の-> _require __DIR__.'/../vendor/autoload.php';_

変更-> _require __DIR__.'/../**created_folder**/vendor/autoload.php';_

オリジナル-> _$app = require_once __DIR__.'/../bootstrap/app.php';_

変更-> _$app = require_once __DIR__.'/../**Created_folder**/bootstrap/app.php';_

ステップ4:symlinkcreate.phpを作成する

ステップ4A:<?php symlink('/home/**server_directory**/**created_folder**/storage/app/public','/home/**server_directory**/public_html/storage');

ステップ4B:yourwebsite.com/symlinkcreate.phpへのアクセス

ステップ4C:symlinkcreate.phpはサーバーを削除します。

最後に、ディレクトリ構造は次のようになります。

_/etc
/logs
/lscache
/mail
/Your_Created_Folder
  ../LARAVEL_FOLDERS
/public_html
  ../css
  ../js
  ../.htaccess
  ../index.php
  ../web.config
/ssl
/tmp
_

終わり。

Laravel 5.5 public_html sorunuiçinbucevabıgönülrahatlığıylakullanabilirsiniz。

3
T.Arslan

Public_htmlがlaravelフォルダー内にない場合、以前の回答をすべて更新したい場合は、次のコードを使用する必要があります。

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

バインディングのように簡単ではありません。最もきれいで詳細な答えは、ここでferrolhoによって提供されます https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5

しかし、最速の答えはpublic_htmlを指すpublicという名前のシンボリックリンクを作成し、index.phpを最後のリンクに配置することです。

1
Diego Viniegra

こんにちはみんな私のために働く...あなたはそれを使用することができます

このアドレスにアクセスしてください:

/app/Providers/AppServiceProvider.php

そして、このコードをファイルの終わりに追加します....

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

Artisanでも使用できるようにパブリックパスを変更する必要がある場合は、bootstrap/app.php、最後のsingletonメソッドの直後:

$app->bind('path.public', function () {
    return base_path("<your public directory name>");
});
0
Mike Rockétt
  1. _bootstrap/app.php_で:

    追加

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

    直後の

    _$app = new Illuminate\Foundation\Application(
      realpath(__DIR__)
    );
    _
  2. _server.php_の修正:

    変化する

    _if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
      return false;
    }
    
    require_once __DIR__.'/public/index.php';
    _

    _if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
      return false;
    }
    
    require_once __DIR__.'/public_html/index.php';
    _
  3. _.gitignore_で、変更

    _/public/hot
    /public/storage
    _

    _/public_html/hot
    /public_html/storage
    _
  4. _webpack.mix.js_で、変更

    _mix.js('resources/js/app.js', 'public/js')
      .sass('resources/sass/app.scss', 'public/css');
    _

    _mix.js('resources/js/app.js', 'public_html/js')
      .sass('resources/sass/app.scss', 'public_html/css');
    _

asset()関数の修正を探していますが、壊れたままです...

0
Cameron Hudson

私にとっては、サーバー設定でルートパブリックフォルダーを変更するまで、これは機能しませんでした。本番環境では、/etc/nginx/sites-enabled/<your_site_name>にあります。テキストエディターで編集し、/publicフォルダーを指すルートパスが表示されるまでスクロールします。それを新しいパブリックフォルダーに変更し、サーバーを再起動します。ローカルでは、VagrantにSSH接続した後、Homestead.yamlおよび/etc/nginx/sites-enabled/<your_site_name>のパスを変更する必要がありました。 vagrant reload --provisionを使用して、確実にキャッチします。その後、念のためindex.phpも編集し、サービスプロバイダーに新しいパスを登録しましたが、それがなくても機能するようです。私はサードパーティの依存関係をLaravelと一緒に使用していません。

0
Arthur Tarasov