usuario1537360
quiero quitar el /public/
fragmento de mis URL de Laravel 5.
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>
pero esto me da una Laravel NotFoundHttpException en la línea 7610 de compiled.php.
En Laravel 4 pude mover el contenido de la carpeta pública a la raíz. La estructura de Laravel 5 es bastante diferente y siguiendo los mismos pasos rompió completamente Laravel (el servidor solo devolvería una página en blanco).
¿Existe algún método para eliminar ‘público’ en un entorno de desarrollo que me permita cambiar entre proyectos con facilidad (normalmente estoy trabajando en 2 o 3 a la vez)?
Estoy usando MAMP y PHP 5.6.2
Asfaq Tamim
Nota: Esto introduce problemas de seguridad muy importantes y no se recomienda.
Para Laravel 5:
- Rebautizar
server.php
en su carpeta raíz de Laravel paraindex.php
- Copia el
.htaccess
archivo de/public
directorio a su carpeta raíz de Laravel.
-
Revise otras respuestas creando solo el archivo .htacess en su directorio raíz, porque esta respuesta puede exponer información confidencial (como el archivo .env)
– mauronet
21 de noviembre de 2020 a las 0:02
-
Su sitio estará disponible para los piratas informáticos porque el archivo .env será visto por todos.
– Abd Abughazaleh
22 de noviembre de 2020 a las 11:27
-
@AbdAbughazaleh ¿Qué sucede si cambia el permiso del archivo .env a 600?
– Mohamed Salehi
12 de mayo de 2022 a las 9:13
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.
-
@HaritsinhGohil únase a esta sala chat.stackoverflow.com/rooms/196804/laravel-and-htaccess para continuar nuestra conversación
– Derk Jan Speelman
22 de julio de 2019 a las 11:16
-
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 ?
– Shovan
21 de agosto de 2019 a las 6:36
-
@ShovonDas Si desea que sus usuarios vayan a
example.com/projects/laravel/blog/
. Primero, crea el proyecto laravel dentro delblog
carpeta. ReemplazarRewriteCond %{REQUEST_URI} !^/public/
conRewriteCond %{REQUEST_URI} !^/projects/laravel/blog/public/
yRewriteRule ^(.*)$ /public/$1 [L,QSA]
conRewriteRule ^projects/laravel/blog/(.*)$ /projects/laravel/blog/public/$1 [L,QSA]
I pensar eso funciona. Hágamelo saber. ElRewriteRule
funciona como:RewriteRule pattern target [Flag1,Flag2,Flag3]
Documentación de Apache RewriteRule– Derk Jan Speelman
21 de agosto de 2019 a las 8:36
-
@RaitisKupce y Riosant medium.com/@crocodile2u/…
– Derk Jan Speelman
28 de diciembre de 2020 a las 14:01
-
@logudotcom si desea acceder a ciertos archivos estáticos en su sitio web, debe otorgarles acceso. Puedes hacer esto con htaccess. Recomiendo encarecidamente mirar los documentos de htaccess developer.mozilla.org/en-US/docs/Learn/Server-side/…
– Derk Jan Speelman
2 de diciembre de 2021 a las 9:47
ka_lin
He resuelto el problema usando 2 respuestas:
- Cambiar el nombre de server.php a index.php (sin modificaciones)
- Copie el .htaccess de la carpeta pública a la carpeta raíz (como dice rimon.ekjon a continuación)
-
Cambiando .htaccess un poco de la siguiente manera para la estática:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
Si hay algún otro archivos estáticos necesario simplemente agregue la extensión a la lista declarada anterior
-
¡Esto para mí funcionó como una explosión! Básicamente resuelve el problema donde no funcionan las rutas, excepto la página de inicio y luego, si prueba la solución de Derk, funcionará, pero no para todos los activos e imágenes. Esto arregló las rutas y también arregló los activos e imágenes. Muchas gracias. 🙂
– Leutecia
2 ene a las 16:35
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>
Pallav Nagar
Crear un .htaccess
presentar en raíz directorio y coloque el código algo como a continuación. Sin embargo, esto aún permitirá que se pueda acceder a su archivo .env a través de una URL, por lo que no es seguro.
<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>
-
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
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.
-
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
tylerh
No se recomienda esta respuesta porque edita los archivos proporcionados por el proveedor. En cambio, manejarlo a través de un cambio en su .htaccess
Se recomienda el archivo.
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.
Esto funcionó, pero cuando realicé este cambio, no se pudieron encontrar todos los archivos de recursos en el directorio /public, y las URL de solicitud no funcionaron, porque usé un asistente de activo ().
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 vuelve a funcionar.
-
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íneaRewriteRule ^(.*)/$ /$1 [L,R=301]
– Shadman
25 de enero de 2018 a las 7:17
-
¿Quién es Rimon Ekjon y dónde los viste decir esta cita?
– TylerH
11 abr a las 14:29
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 eliminar público de url
– usuario3151197
27/09/2017 a las 16:30
La mayoría de las respuestas en esta página son prácticas increíblemente malas. La ÚNICA solución segura es cambiar el Raiz del documento de su proveedor de alojamiento web para que sea la carpeta pública. Si está en un servidor que solo publica la carpeta public_html, elimine esto y cree un nuevo enlace simbólico public_html que apunte a la carpeta pública de Laravel y le dé un alias.
– Snapey
22 de marzo de 2022 a las 22:32
A
public
la carpeta está ahí para ser expuesta en la raíz del documento y nada más. Si no lo hace, tendrá problemas de seguridad entre el acceso al almacenamiento privado, el archivo env y otros archivos sensibles. ¡Cambia la raíz de tu documento!no hay una razón válida para no hacer esto en otro lugar que no sea un entorno local, es como no tener una contraseña en la base de datos– Tofandel
31 de agosto de 2022 a las 10:25