我正在使用一个共享主机,它使用cPanel作为其控制面板,在cPanel public_html
内是默认的根目录,因此我无法使我的Laravel应用程序正常工作。
有没有办法让Laravel使用public_html
代替公用文件夹?
答案 0 :(得分:51)
通过简单的搜索很容易找到它。
在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');
});
}
答案 1 :(得分:18)
如果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';
});
}
答案 2 :(得分:3)
这些答案对于laravel 5.5不起作用,但我自己的方法可以帮助你。
步骤1:将除公共文件以外的所有文件丢弃到服务器上的主目录。
步骤2:公共文件到服务器上的public_html文件。
步骤3:从public_html中提取index.php文件并将其更改为。
步骤3A:
原始 - &gt; require __DIR__.'/../vendor/autoload.php';
更改 - &gt; require __DIR__.'/../**created_folder**/vendor/autoload.php';
原创 - &gt; $app = require_once __DIR__.'/../bootstrap/app.php';
更改 - &gt; $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_htmlsorunuiçinbucevabıgönülalhatlığıylakullanabilirsiniz。
答案 3 :(得分:3)
服务器
本主题中描述的方法可以正常工作,因此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';
});
}
本地php工匠服务开发
但是,您还会遇到另外一个问题。如果您正在本地计算机上开发应用程序,并且正在使用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
因此,它将弄乱您的代码。为了澄清这一点,您必须提供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 :(得分:1)
这不像绑定那么容易。 ferrolho在https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
提供了最清晰,更详尽的答案但最快的答案是创建一个名为public的符号链接指向public_html并将index.php放在最后一个中。
答案 5 :(得分:1)
只想更新以前的所有答案,如果你的public_html不在laravel文件夹中,那么你需要使用这段代码:
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
答案 6 :(得分:0)
对于那些需要更改公共路径以便Artisan也可以使用的人,请在bootstrap/app.php
之后添加以下singleton
方法:
$app->bind('path.public', function () {
return base_path("<your public directory name>");
});
答案 7 :(得分:0)
大家好,它对我有用......你可以用它
转到这个地址:
/app/Providers/AppServiceProvider.php
并将此代码附加到文件末尾....
public function register()
{ $this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
答案 8 :(得分:0)
对我来说,这一切都不起作用,除非我在服务器设置中更改了根公用文件夹。在生产中,它在/etc/nginx/sites-enabled/<your_site_name>
中。使用文本编辑器对其进行编辑,然后滚动直到看到指向/public
文件夹的根路径。将其更改为新的公用文件夹,然后重新启动服务器。在本地上,我在SSH进入Vagrant后必须更改Homestead.yaml
和/etc/nginx/sites-enabled/<your_site_name>
中的路径。 vagrant reload --provision
,以确保它流行起来。然后,我还编辑了index.php
并在服务提供者中注册了一个新路径,以防万一,但是如果没有它,它似乎可以工作。不过,我没有在Laravel中使用任何第三方的依赖关系,所以我不知道在这种情况下这是否行得通。
答案 9 :(得分:0)
在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()
函数的修复程序,该函数仍然无效...
答案 10 :(得分:0)
简单的根目录创建.htaccess文件并添加代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
答案 11 :(得分:0)
对我来说,最简单的解决方案是创建符号链接。
public_html
文件夹。ssh
连接到服务器。~/laravel
文件夹中。~/
文件夹中:rm -r public_html
。此命令将删除public_html文件夹及其所有内容。ln -s $(pwd)/laravel/public $(pwd)/public_html
。 $(pwd)
将替换为从服务器根目录开始的绝对路径。答案 12 :(得分:0)
我花了两天时间才弄明白,但最终我通过执行以下步骤将我的 Laravel 项目部署到了我的 cPanel 虚拟主机:
if ($uri !== '/' && file_exists(__DIR__ . '/public_html' .$uri)) {
return false;
}
require_once __DIR__ . '/public_html/index.php';
mix.js('resources/js/app.js', 'public_html/js')
.postCss('resources/css/app.css', 'public_html/css', [
//
]);
如果您有任何问题,请随时与我联系:)