コントロールパネルとしてcPanelを使用し、cPanel内で共有ホスティングを使用していますpublic_html
がデフォルトのルートディレクトリです。このため、Laravelアプリケーションが正常に動作しません。
Laravel use public_html
パブリックフォルダーの代わりに?
簡単な検索でこれを見つけるのはとても簡単です。
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');
});
}
_
ロバートの_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';
});
}
_
サーバー
トピックで説明されているメソッドはうまく機能しているため、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値への相対パスを提供します。
ハッピーコーディング。
これらの回答は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。
Public_htmlがlaravelフォルダー内にない場合、以前の回答をすべて更新したい場合は、次のコードを使用する必要があります。
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
バインディングのように簡単ではありません。最もきれいで詳細な答えは、ここでferrolhoによって提供されます https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
しかし、最速の答えはpublic_htmlを指すpublicという名前のシンボリックリンクを作成し、index.phpを最後のリンクに配置することです。
こんにちはみんな私のために働く...あなたはそれを使用することができます
このアドレスにアクセスしてください:
/app/Providers/AppServiceProvider.php
そして、このコードをファイルの終わりに追加します....
public function register()
{ $this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
Artisanでも使用できるようにパブリックパスを変更する必要がある場合は、bootstrap/app.php
、最後のsingleton
メソッドの直後:
$app->bind('path.public', function () {
return base_path("<your public directory name>");
});
_bootstrap/app.php
_で:
追加
_$app->bind('path.public', function() {
return __DIR__;
});
_
直後の
_$app = new Illuminate\Foundation\Application(
realpath(__DIR__)
);
_
_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';
_
_.gitignore
_で、変更
_/public/hot
/public/storage
_
に
_/public_html/hot
/public_html/storage
_
_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()
関数の修正を探していますが、壊れたままです...
私にとっては、サーバー設定でルートパブリックフォルダーを変更するまで、これは機能しませんでした。本番環境では、/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と一緒に使用していません。