我正在使用一个共享主机,它使用cPanel作为其控制面板,在cPanel中public_html
是默认的根目录,因此我无法使我的Laravel应用程序正常工作。
有没有办法让Laravel使用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
:
加
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');
函数的修复程序,它仍然存在...
如果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';
});
}
服务器
主题中描述的方法工作得很好,因此修改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';
});
}
本地php工匠服务于开发
但是,您还可以遇到另外一个问题。如果您正在本地计算机上开发应用程序并且您正在使用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:
原创 - > qazxsw poi
变化 - > require __DIR__.'/../vendor/autoload.php';
原创 - > require __DIR__.'/../**created_folder**/vendor/autoload.php';
变化 - > $app = require_once __DIR__.'/../bootstrap/app.php';
第4步:创建symlinkcreate.php
步骤4A:$app = require_once __DIR__.'/../**Created_folder**/bootstrap/app.php';
步骤4B:yourwebsite.com/symlinkcreate.php访问
步骤4C:symlinkcreate.php删除您的服务器。
最后,目录结构如下所示:
<?php
symlink('/home/**server_directory**/**created_folder**/storage/app/public','/home/**server_directory**/public_html/storage');
完。
对于Laravel 5.5 public_html问题,您可以安静地使用此答案。
只想更新以前的所有答案,如果你的public_html不在laravel文件夹中,那么你需要使用这段代码:
/etc
/logs
/lscache
/mail
/Your_Created_Folder
../LARAVEL_FOLDERS
/public_html
../css
../js
../.htaccess
../index.php
../web.config
/ssl
/tmp
这不像绑定那么容易。最简洁,更精心的答案由ferrolho在这里提供$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
但最快的答案是创建一个名为public的符号链接指向public_html并将index.php放在最后一个。
大家好,它适合我...你可以使用它
去这个地址:
https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
并将此代码附加到文件末尾....
/app/Providers/AppServiceProvider.php
对于那些需要更改公共路径以便Artisan也可以使用的人,可以在public function register()
{ $this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
上添加以下内容,就在最后一个bootstrap/app.php
方法之后:
singleton
对我来说,除非我在服务器设置中更改了根公用文件夹,否则这一切都无效。在生产中它在$app->bind('path.public', function () {
return base_path("<your public directory name>");
});
。使用文本编辑器编辑它,然后滚动直到看到指向/etc/nginx/sites-enabled/<your_site_name>
文件夹的根路径。将其更改为您的新公用文件夹,然后重新启动服务器。在本地,我必须改变/public
和Homestead.yaml
的路径,在我连接到Vagrant之后。 /etc/nginx/sites-enabled/<your_site_name>
确保它流行起来。然后我还编辑了vagrant reload --provision
并在服务提供商中注册了一条新路径,以防万一,但似乎没有它。我没有使用Laravel的任何第三方依赖,所以我不知道这是否适用于那种情况。