Ravexina
Estoy usando un alojamiento compartido que usa cPanel como su panel de control y dentro de cPanel public_html
es el directorio raíz predeterminado, debido a esto no puedo hacer que mi aplicación Laravel funcione correctamente.
¿Hay alguna forma de hacer que Laravel use public_html
en lugar de carpeta pública?
Roberto
Bastante fácil de encontrar esto con una simple búsqueda.
En su index.php agregue las siguientes 3 líneas.
/*
|--------------------------------------------------------------------------
| 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__;
});
Editar:
Como mencionó Burak Erdem, otra opción (y más preferible) es poner esto en el \App\Providers\AppServiceProvider
register()
método.
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// ...
$this->app->bind('path.public', function() {
return base_path('public_html');
});
}
-
no funciona para mí: error fatal: llamar a una función miembro make () en un no objeto en …
– Ravexina
13 mayo 2015 a las 17:14
-
Solo agregando eso? Puedo cambiarlo sin ningún error. ¿Puede publicar el mensaje de error completo? No me dice mucho.
– Roberto
13 mayo 2015 a las 19:45
-
@Robert cuando uso tu solución, me da error
[ErrorException] chdir(): No such file or directory (errno 2)
.– Faisal Ahsan
18 de marzo de 2016 a las 7:54
-
Sé que ha sido hace bastante tiempo, pero esta pregunta todavía ocupa un lugar destacado en Google. Por lo tanto, quería señalar que, para mí, estas líneas de código deben agregarse DESPUÉS de la
Turn On The Lights
-sección. Entonces deberías actualizarpath.public
apath.public_html
. Al menos, eso funcionó para mí. 🙂– Carsten
1 de julio de 2016 a las 8:22
-
Esto no funciona para laravel-mix, que aún compila activos en el
public
directorio.– Lars Nyström
4 de febrero de 2018 a las 15:11
Burak Erdem
si es de roberto index.php
solución no funciona para usted, también puede registrar el siguiente código en Proveedor de servicios de aplicaciones (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_html';
});
}
-
Prefiero usar este método. Ha trabajado en Laravel 5.3.
– Muhammad Zamroni
23 de abril de 2017 a las 3:54
-
Prefiero este, porque es más probable que index.php cambie en la actualización del marco
–Mladen Janjetovic
31 de marzo de 2018 a las 19:58
-
¿Se supone que esta respuesta dice
public_html
en lugar depublic_http
?– hannebaumsaway
1 de febrero de 2021 a las 17:16
-
Estoy usando laravel 5.7 y esto no funciona, ¿hay algo que deba hacer?
– Hemant Kumar
20 de mayo de 2021 a las 7:49
David
Servidor
Los métodos descritos en el tema funcionan bien, por lo que modificar el método de registro App\Providers\AppServiceProvider.php debería hacer el trabajo:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
public function register()
{
$this->app->bind('path.public', function() {
return base_path() . '/public_http';
});
}
Desarrollo local de servicios php artesanales
Sin embargo, hay un problema más que puede experimentar. Si está desarrollando su aplicación en una máquina local y está utilizando php artisan serve
comando para servir su aplicación, la romperá solo con la sintaxis anterior. Todavía necesita ajustar el archivo server.php que existe en el directorio principal. Edite el contenido del mismo y reemplace cada aparición de /public
a /public_html
por lo que se ve así:
<?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 !== "https://stackoverflow.com/" && file_exists(__DIR__.'/public_html'.$uri)) {
return false;
}
require_once __DIR__.'/public_html/index.php';
Después. Simplemente detenga su servidor y recárguelo con php artisan serve
.
Desarrollo front end laravel-mix
Si está utilizando webpack y laravel-mix para generar sus archivos css y js, esto también necesita alguna actualización. Sin ajustar webpack.mix.js, terminará con algo como esto en npm run watch
o npm run production
:
.
..
public
_html
js
public_html
css
public_html
Así que va a estropear tu código. Para aclarar esto, debe proporcionar una ruta pública a su archivo webpack.mix.js. Podría verse así:
const mix = require('laravel-mix');
mix.setPublicPath('public_html/');
mix.js('resources/js/app.js', 'js')
mix.sass('resources/sass/app.scss', 'css');
Esto va a cambiar la definición predeterminada de directorio público de public
a public_html
y las siguientes líneas proporcionan una ruta relativa a su valor setPublicPath.
Codificación feliz.
-
¡Gracias por su respuesta! esto funciona muy bien, excepto por vue. compila css y js en la carpeta adecuada (en mi caso es /../public_html) pero no funcionan. cuando compila app.js no tiene en cuenta la ruta de los archivos .vue:
./resources/js/components/SetBgImg.vue?vue&type=script&lang=js&":
debiera ser./../projectname/resources/js/components/SetBgImg.vue?vue&type=script&lang=js&":
¿Cómo se puede arreglar esto`?– energía de tiburón
11 de abril de 2020 a las 13:50
-
No olvides reiniciar
npm run
para permitir que los cambios surtan efecto.– Fer Tostado
19 de febrero de 2021 a las 18:00
-
No uso vue, pero hoy en día esta respuesta funciona para localhost y me deshago de copiar y pegar activos en la carpeta pública del proyecto sincronizado en la nube cada maldita vez.
– Código para la vida
22 de abril de 2021 a las 19:02
Ahmadreza
Ir a esta dirección:
/app/Providers/AppServiceProvider.php
y agregue este código al final del archivo:
public function register()
{ $this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
Solo quiero actualizar todas las respuestas anteriores, si su public_html no está dentro de la carpeta laravel, entonces necesita usar este código:
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
saif uddin
El directorio raíz simple crea el archivo .htaccess y agrega el código:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Mike Rockett
Para aquellos que necesitan cambiar la ruta pública para que también esté disponible para Artisan, agregue lo siguiente a bootstrap/app.php
justo después de la última singleton
método:
$app->bind('path.public', function () {
return base_path("<your public directory name>");
});