Laravel 5 – Eliminar público de la URL

6 minutos de lectura

Laravel 5 – Eliminar publico de la URL
usuario1537360

Sé que esta es una pregunta muy popular, pero no he podido encontrar una solución que funcione para Laravel 5. He intentado migrar desde Codeigniter durante mucho tiempo, pero este enrevesado proceso de instalación me sigue desanimando.

No quiero ejecutar una máquina virtual, esto parece incómodo al cambiar de proyecto.

No quiero configurar la raíz de mi documento en la carpeta pública, esto también es incómodo al cambiar de proyecto.

Probé el método .htaccess mod_rewrite

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Esto solo me da una Laravel NotFoundHttpException en la línea 7610 de compiled.php.

Cuando probé L4 hace un tiempo, usé el método de mover el contenido de la carpeta pública a la raíz. La estructura de L5 es bastante diferente y siguiendo los mismos pasos rompió completamente Laravel (el servidor solo devolvería una página en blanco).

¿Existe un método decente para eliminar ‘público’ en un entorno de desarrollo que:

  1. Funciona con L5
  2. Me permite cambiar entre proyectos con facilidad (normalmente estoy trabajando en 2 o 3 a la vez).

Gracias

** Estoy usando MAMP y PHP 5.6.2

  • La estructura de carpetas en la guía es diferente a la mía, me imagino que no está usando L5. Omití los cambios que hizo en el archivo Bootstrap/Paths, porque no existe. Sin embargo, el proyecto parece estar funcionando. ¿Crees que esto está bien?

    – usuario1537360

    6 de febrero de 2015 a las 11:37

  • mi error déjame agregar respuesta para L5

    – kamlesh.bar

    6 de febrero de 2015 a las 11:41

  • sin éxito tratando de lo mismo

    – kamlesh.bar

    6 de febrero de 2015 a las 12:06


  • Parece funcionar simplemente modificando las rutas en el archivo index.php, pero soy nuevo en Laravel, así que obviamente no puedo comentar si esto es estable/seguro.

    – usuario1537360

    6 de febrero de 2015 a las 13:06

  • Se supone que las otras carpetas/archivos están debajo de la raíz de su documento.

    – Mike Rockett

    7 febrero 2015 a las 18:04

Laravel 5 – Eliminar publico de la URL
Derk Jan Speelman


TENGA EN CUENTA al servir un proyecto de Laravel con Docker: no necesitará hacer nada de esto. Usa solo esta opción cuando su raíz (o más comúnmente: public_html) de su sitio web es su proyecto Laravel (este no es el caso cuando está usando Docker).

¡NO!

REALMENTE NO DEBES rebautizar server.php en su carpeta raíz de Laravel para index.php
y copiar el .htaccess archivo de la /public directorio a su carpeta raíz de Laravel !!!

De esta manera, todos pueden acceder a algunos de sus archivos (.env por ejemplo). Inténtalo tú mismo. ¡No quieres eso!


HACER

En su lugar, debe crear un .htaccess archivo en su raíz como este:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

Esto reescribirá silenciosamente todos sus URI base en el /public carpeta. Incluso todos Encabezadospor ejemplo el encabezado de autorización HTTPy todos los parámetros de URI opcionales se pasarán silenciosamente al /public carpeta también.

Eso es todo

  • Funciona bien en producción pero no funciona en local ¿alguna sugerencia?

    – Haritsinh Gohil

    22 de julio de 2019 a las 6:11

  • ¡Esto está funcionando perfectamente! local y servidor ¡gracias por la ayuda de seguridad!

    – Ghanshyam Nakiya

    9 de agosto de 2019 a las 13:10

  • Hola, @DerkJanSpeelman Estoy tratando de cargar mis archivos laravel dentro de una subcarpeta en mi alojamiento como: (example.com/projects/laravel/blog) en ese caso, los visitantes deben visitar example.com/projects/laravel/blog/ público, por lo que pongo un archivo .htaccess con su código en la raíz de la carpeta del blog y quiero que se redirija a la carpeta pública. Pero no está funcionando. Aquí está el error que ocurre: la URL solicitada /public/ no se encontró en este servidor. Como puedo resolver esto ?

    – Shovon Das

    21 de agosto de 2019 a las 6:36

  • Esta respuesta está subestimada. Se votó a favor de Negrita y se resaltó No. Está funcionando absolutamente bien.

    – Varun Ved

    9 oct 2019 a las 17:10


  • La respuesta perfecta

    – Mansur Alnasser

    30 de diciembre de 2019 a las 14:01

En Laravel 5.5, cree el archivo .htacess en su directorio raíz y coloque el siguiente código: Link de referencia

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>

1647298210 641 Laravel 5 – Eliminar publico de la URL
Pallav Nagar

Crear .htaccess presentar en raíz directorio y coloque el código algo como a continuación.

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php
</IfModule>

  • Realmente recomiendo esta solución.

    – El último codificador

    04/06/2019 a las 20:39

  • También recomiendo esta solución.

    – eduardo a

    7 ago 2019 a las 21:38

  • Muchas gracias. esto es perfecto

    – Prapo

    21 oct 2019 a las 18:27

  • funciona bien, pero aún se puede acceder al archivo .env directamente desde la URL.

    – Manoj Singh

    19 de diciembre de 2019 a las 9:13

  • ¿Es una solución segura?

    – Desarrollador PHP sénior

    15 de abril de 2020 a las 17:38

Manera fácil de eliminar público de laravel 5 url. Solo necesita cortar index.php y .htaccess del directorio público y pegarlo en el directorio raíz, eso es todo y reemplazar dos líneas en index.php como

require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';

Nota: El método anterior es solo para los principiantes, ya que podrían tener problemas para configurar el host virtual y la mejor solución es configurar el host virtual en la máquina local y señalarlo al directorio público del proyecto.

  • Realmente recomiendo esta solución.

    – El último codificador

    04/06/2019 a las 20:39

  • También recomiendo esta solución.

    – eduardo a

    7 ago 2019 a las 21:38

  • Muchas gracias. esto es perfecto

    – Prapo

    21 oct 2019 a las 18:27

  • funciona bien, pero aún se puede acceder al archivo .env directamente desde la URL.

    – Manoj Singh

    19 de diciembre de 2019 a las 9:13

  • ¿Es una solución segura?

    – Desarrollador PHP sénior

    15 de abril de 2020 a las 17:38

@rimon.ekjon dijo:

Cambie el nombre de server.php en su carpeta raíz de Laravel a index.php y copie el archivo .htaccess del directorio /public a su carpeta raíz de Laravel. — Eso es todo !! 🙂

Eso está funcionando para mí. Pero todos los archivos de recursos en el directorio /public no se pudieron encontrar y las URL de solicitud no funcionaron, porque usé el asistente de activos().

Cambié la función /Illuminate/Foundation/helpers.php/asset() de la siguiente manera:

function asset($path, $secure = null)
{
    return app('url')->asset("public/".$path, $secure);
}

Ahora todo funciona 🙂

Gracias @rimon.ekjon y a todos ustedes.

Actualización del autor 2020

Esta respuesta no es recomendable. En cambio, el manejo .htaccess Se recomienda el archivo.

  • Esta no es una buena manera de resolver este problema, ya que está intentando actualizar en el directorio de proveedores, lo cual no es una buena práctica.

    – Shadman

    25 de enero de 2018 a las 6:56

  • solo necesitas agregar RewriteRule ^(.*)$ public/$1 [L] en su archivo .htaccess que ha copiado del directorio público, eliminando esta línea RewriteRule ^(.*)/$ /$1 [L,R=301]

    – Shadman

    25 de enero de 2018 a las 7:17


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad