php - not - Cómo cambiar la carpeta pública a public_html en laravel 5
public to public_html laravel (10)
Estoy usando un alojamiento compartido que usa cPanel como 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 manera de hacer que Laravel use
public_html
lugar de una carpeta pública?
-
En
bootstrap/app.php
:Añadir
$app->bind(''path.public'', function () { return base_path("<your public directory name>"); });
justo después de
$app->bind(''path.public'', function() { return __DIR__; });
-
Arreglando
server.php
:Cambio
$app = new Illuminate/Foundation/Application( realpath(__DIR__) );
a
if ($uri !== ''/'' && file_exists(__DIR__.''/public''.$uri)) { return false; } require_once __DIR__.''/public/index.php'';
-
En
.gitignore
, cambioif ($uri !== ''/'' && file_exists(__DIR__.''/public_html''.$uri)) { return false; } require_once __DIR__.''/public_html/index.php'';
a
/public/hot /public/storage
-
En
webpack.mix.js
, cambie/public_html/hot /public_html/storage
a
mix.js(''resources/js/app.js'', ''public/js'') .sass(''resources/sass/app.scss'', ''public/css'');
Todavía estoy buscando una solución para la función
asset()
, que permanece rota ...
Estas respuestas no funcionaron para laravel 5.5, pero mi propio método puede ayudarlo.
Paso 1: descarte todos los archivos, excepto el público, en el directorio principal del servidor.
Paso 2: archivo público al archivo public_html en el servidor.
Paso 3: Extraiga el archivo index.php de public_html y cámbielo de esta manera.
Paso 3A:
Orginal ->
require __DIR__.''/../vendor/autoload.php'';
Cambios ->
require __DIR__.''/../**created_folder**/vendor/autoload.php'';
Original ->
$app = require_once __DIR__.''/../bootstrap/app.php'';
Cambios ->
$app = require_once __DIR__.''/../**Created_folder**/bootstrap/app.php'';
Paso 4: crea symlinkcreate.php
Paso 4A:
<?php symlink(''/home/**server_directory**/**created_folder**/storage/app/public'',''/home/**server_directory**/public_html/storage'');
Paso 4B: visite su sitio web.com/symlinkcreate.php
Paso 4C: symlinkcreate.php elimina tu servidor.
Finalmente, la estructura del directorio se ve así:
/etc
/logs
/lscache
/mail
/Your_Created_Folder
../LARAVEL_FOLDERS
/public_html
../css
../js
../.htaccess
../index.php
../web.config
/ssl
/tmp
Terminar.
Laravel 5.5 public_html sorunu için bu cevabı gönül rahatlığıyla kullanabilirsiniz.
Muy 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 método
/App/Providers/AppServiceProvider
register()
.
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// ...
$this->app->bind(''path.public'', function() {
return base_path(''public_html'');
});
}
No es tan fácil como la encuadernación. La respuesta más limpia y elaborada la proporciona ferrolho aquí https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
Pero la respuesta más rápida es crear un enlace simbólico llamado public apuntando a public_html y poner su index.php en el último.
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 del último método
singleton
:
mix.js(''resources/js/app.js'', ''public_html/js'')
.sass(''resources/sass/app.scss'', ''public_html/css'');
Para mí, nada de esto funcionó hasta que cambié la carpeta pública raíz en la configuración del servidor.
En producción está en
/etc/nginx/sites-enabled/<your_site_name>
.
Edítelo con un editor de texto y simplemente desplácese hasta que vea la ruta raíz apuntando a
/public
carpeta
/public
.
Cambie eso a lo que sea su nueva carpeta pública y reinicie el servidor.
En local, tuve que cambiar la ruta en
Homestead.yaml
y
/etc/nginx/sites-enabled/<your_site_name>
después de ingresar SSHed en Vagrant.
vagrant reload --provision
para asegurarse de que se enganchó.
Luego también edité
index.php
y
index.php
una nueva ruta en el proveedor de servicios por si acaso, pero parece funcionar sin él.
Sin embargo, no uso ninguna dependencia de terceros con Laravel, así que no sé si esto funcionará en ese caso.
Si la solución
index.php
de Robert no funciona para usted, también puede registrar el siguiente código en
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'';
});
}
Solo desea 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'');
});
hola chicos me funciona ... puedes usarlo
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'');
});
}
Servidor
Los métodos descritos en el tema funcionan bien, por lo que el método de registro modyfing 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 artesanales de php
Sin embargo, hay un problema más que puede experimentar.
Si está desarrollando su aplicación en una máquina local y está utilizando el comando
php artisan serve
para servir su aplicación, la dividirá solo con la sintaxis anterior.
Aún necesita ajustar el archivo server.php que existe en el directorio principal.
Edite el contenido y reemplace cada aparición de
/public
a
/public_html
, para que se vea así:
<?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'';
Después de esto.
Simplemente detenga su servidor y vuelva a cargarlo con
php artisan serve
.
Desarrollo front-end laravel-mix
Si está utilizando webpack y laravel-mix para generar sus archivos css y js, entonces esto también necesita alguna actualización.
Sin ajustar webpack.mix.js, terminarás con algo como esto en
npm run watch
o
npm run production
:
.
..
public
_html
js
public_html
css
public_html
Entonces 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 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.
Feliz codificación