working public_html not name change carpeta cambiar php apache2 laravel-5 cpanel

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?


  1. 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__; });

  2. 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'';

  3. En .gitignore , cambio

    if ($uri !== ''/'' && file_exists(__DIR__.''/public_html''.$uri)) { return false; } require_once __DIR__.''/public_html/index.php'';

    a

    /public/hot /public/storage

  4. 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.

Ver: https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5

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''); }); }



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