如何将 public 文件夹更改为 laravel 5 中的 public_html
How to change public folder to public_html in laravel 5
我正在使用共享主机,它使用 cPanel 作为其控制面板,并且在 cPanel 中 public_html
是默认的根目录,因此我无法让我的 Laravel 应用程序工作正确。
有没有办法让 Laravel 使用 public_html
而不是 public 文件夹?
通过简单的搜索很容易找到它。
在您的 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';
});
}
对于那些需要更改 public 路径以便 Artisan 也可用的人,将以下内容添加到 bootstrap/app.php
,就在最后一个 singleton
方法之后:
$app->bind('path.public', function () {
return base_path("<your public directory name>");
});
不像绑定那么简单。 ferrolho 在这里 https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
提供了最清晰、更详尽的答案
但最快的答案是创建一个名为 public 的符号 link 指向 public_html 并将您的 index.php 放在最后一个。
只是想更新所有以前的答案,如果您的 public_html 不在 laravel 文件夹中,那么您需要使用此代码:
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
这些答案不适用于 laravel 5.5,但我自己的方法可以帮助您。
第 1 步:丢弃除 public 文件之外的所有文件到服务器上的主目录。
第 2 步:Public 文件到服务器上的 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:您的网站。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 sorunu için bu cevabı gönül rahatlığıyla kullanabilirsiniz.
转到此地址:
/app/Providers/AppServiceProvider.php
并将此代码附加到文件末尾:
public function register()
{ $this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
对我来说 none 在我更改服务器设置中的根 public 文件夹之前一直有效。在生产中它在 /etc/nginx/sites-enabled/<your_site_name>
中。使用文本编辑器对其进行编辑,然后滚动直到看到指向 /public
文件夹的根路径。将其更改为新的 public 文件夹并重新启动服务器。在本地,在通过 SSH 进入 Vagrant 后,我不得不更改 Homestead.yaml
和 /etc/nginx/sites-enabled/<your_site_name>
中的路径。 vagrant reload --provision
以确保它流行起来。然后我还编辑了 index.php
并在服务提供商中注册了一个新路径以防万一,但它似乎没有它。不过,我没有将任何第 3 方依赖项与 Laravel 一起使用,所以我不知道这在那种情况下是否有效。
在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()
功能的修复程序,该功能仍然损坏...
服务器
主题中描述的方法工作得很好,所以 modyfing 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';
});
}
本地phpartisan服务发展
但是,您可能会遇到另外一个问题。如果您在本地机器上开发您的应用程序并且您正在使用 php artisan serve
命令来为您的应用程序提供服务,您将仅使用上述语法来破坏它。您仍然需要调整主目录中存在的 server.php 文件。编辑它的内容,并将每次出现的 /public
替换为 /public_html
,因此它看起来像这样:
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/
$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
所以它会弄乱你的代码。为澄清这一点,您必须提供 public 文件的 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
更改为 public_html
,下一行提供了您的 setPublicPath 值的相对路径。
编码愉快。
简单的根目录创建.htaccess 文件并添加代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/ [L]
</IfModule>
对我来说最简单的解决方案是创建符号 link。
- 备份您的
public_html
文件夹。
- 通过
ssh
连接到您的服务器。
- 在我的特定情况下,整个应用程序位于
~/laravel
文件夹中。
- 现在您必须在
~/
文件夹中:
- 运行
rm -r public_html
。此命令将删除 public_html 文件夹及其所有内容。
- 使符号化 link
ln -s $(pwd)/laravel/public $(pwd)/public_html
。 $(pwd)
将替换为从服务器根目录开始的绝对路径。
- 现在您应该可以看到想要的结果了。
我花了两天时间才搞清楚,但最后我通过执行后续步骤将 Laravel-项目部署到我的 cPanel 虚拟主机:
- 更改 server.php 文件如下:
if ($uri !== '/' && file_exists(__DIR__ . '/public_html' .$uri)) {
return false;
}
require_once __DIR__ . '/public_html/index.php';
- 更改webpack.mix.js如下:
mix.js('resources/js/app.js', 'public_html/js')
.postCss('resources/css/app.css', 'public_html/css', [
//
]);
- 将Laravel-project中的“public”文件夹改名为“public_html”,并将代码上传到cPanel根目录。确保您有来自当前 public_html 目录的备份。如果您的主机和编辑的 .env 文件上有正确的 PHP 版本,那么一切都应该正常工作。
我的 cPanel 根目录(来自文件管理器)如下所示:
和public_html(原来是public目录)看起来是这样的:
如果您有任何问题,请随时与我联系:)
我正在使用共享主机,它使用 cPanel 作为其控制面板,并且在 cPanel 中 public_html
是默认的根目录,因此我无法让我的 Laravel 应用程序工作正确。
有没有办法让 Laravel 使用 public_html
而不是 public 文件夹?
通过简单的搜索很容易找到它。
在您的 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';
});
}
对于那些需要更改 public 路径以便 Artisan 也可用的人,将以下内容添加到 bootstrap/app.php
,就在最后一个 singleton
方法之后:
$app->bind('path.public', function () {
return base_path("<your public directory name>");
});
不像绑定那么简单。 ferrolho 在这里 https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
提供了最清晰、更详尽的答案但最快的答案是创建一个名为 public 的符号 link 指向 public_html 并将您的 index.php 放在最后一个。
只是想更新所有以前的答案,如果您的 public_html 不在 laravel 文件夹中,那么您需要使用此代码:
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
这些答案不适用于 laravel 5.5,但我自己的方法可以帮助您。
第 1 步:丢弃除 public 文件之外的所有文件到服务器上的主目录。
第 2 步:Public 文件到服务器上的 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:您的网站。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 sorunu için bu cevabı gönül rahatlığıyla kullanabilirsiniz.
转到此地址:
/app/Providers/AppServiceProvider.php
并将此代码附加到文件末尾:
public function register()
{ $this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
对我来说 none 在我更改服务器设置中的根 public 文件夹之前一直有效。在生产中它在 /etc/nginx/sites-enabled/<your_site_name>
中。使用文本编辑器对其进行编辑,然后滚动直到看到指向 /public
文件夹的根路径。将其更改为新的 public 文件夹并重新启动服务器。在本地,在通过 SSH 进入 Vagrant 后,我不得不更改 Homestead.yaml
和 /etc/nginx/sites-enabled/<your_site_name>
中的路径。 vagrant reload --provision
以确保它流行起来。然后我还编辑了 index.php
并在服务提供商中注册了一个新路径以防万一,但它似乎没有它。不过,我没有将任何第 3 方依赖项与 Laravel 一起使用,所以我不知道这在那种情况下是否有效。
在
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()
功能的修复程序,该功能仍然损坏...
服务器
主题中描述的方法工作得很好,所以 modyfing 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';
});
}
本地phpartisan服务发展
但是,您可能会遇到另外一个问题。如果您在本地机器上开发您的应用程序并且您正在使用 php artisan serve
命令来为您的应用程序提供服务,您将仅使用上述语法来破坏它。您仍然需要调整主目录中存在的 server.php 文件。编辑它的内容,并将每次出现的 /public
替换为 /public_html
,因此它看起来像这样:
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/
$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
所以它会弄乱你的代码。为澄清这一点,您必须提供 public 文件的 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
更改为 public_html
,下一行提供了您的 setPublicPath 值的相对路径。
编码愉快。
简单的根目录创建.htaccess 文件并添加代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/ [L]
</IfModule>
对我来说最简单的解决方案是创建符号 link。
- 备份您的
public_html
文件夹。 - 通过
ssh
连接到您的服务器。 - 在我的特定情况下,整个应用程序位于
~/laravel
文件夹中。 - 现在您必须在
~/
文件夹中: - 运行
rm -r public_html
。此命令将删除 public_html 文件夹及其所有内容。 - 使符号化 link
ln -s $(pwd)/laravel/public $(pwd)/public_html
。$(pwd)
将替换为从服务器根目录开始的绝对路径。 - 现在您应该可以看到想要的结果了。
我花了两天时间才搞清楚,但最后我通过执行后续步骤将 Laravel-项目部署到我的 cPanel 虚拟主机:
- 更改 server.php 文件如下:
if ($uri !== '/' && file_exists(__DIR__ . '/public_html' .$uri)) {
return false;
}
require_once __DIR__ . '/public_html/index.php';
- 更改webpack.mix.js如下:
mix.js('resources/js/app.js', 'public_html/js')
.postCss('resources/css/app.css', 'public_html/css', [
//
]);
- 将Laravel-project中的“public”文件夹改名为“public_html”,并将代码上传到cPanel根目录。确保您有来自当前 public_html 目录的备份。如果您的主机和编辑的 .env 文件上有正确的 PHP 版本,那么一切都应该正常工作。
我的 cPanel 根目录(来自文件管理器)如下所示:
和public_html(原来是public目录)看起来是这样的:
如果您有任何问题,请随时与我联系:)