tugordobello
necesito quitar index.php
o public/index.php
de la URL generada en Laravel; comúnmente la ruta es localhost/public/index.php/someWordForRoute
debe ser algo como localhost/someWordForRoute.
.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes.
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php[L]
aplicación/config/aplicación.php
'url' => 'http://localhost',
¿Cómo puedo cambiar eso?
Luzán Baral
Opción 1: Usar .htaccess
Si aún no está allí, cree un archivo .htaccess en el directorio raíz de Laravel. Crear un .htaccess
archive su directorio raíz de Laravel si aún no existe. (Normalmente está bajo su public_html
carpeta)
Edite el archivo .htaccess para que contenga el siguiente código:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Ahora debería poder acceder al sitio web sin la parte “/public/index.php/”.
Opción 2: Mover cosas en el directorio ‘/ público’ al directorio raíz
Cree una nueva carpeta en su directorio raíz y mueva todos los archivos y carpetas excepto la carpeta pública. Puedes llamarlo como quieras. Usaré “laravel_code”.
A continuación, mueva todo fuera del directorio público a la carpeta raíz. Debería dar como resultado algo similar a esto:
Después de eso, todo lo que tenemos que hacer es editar las ubicaciones en el laravel_code/bootstrap/paths.php
archivo y el index.php
archivo.
En laravel_code/bootstrap/paths.php
encuentra la siguiente línea de código:
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public',
Y cambiarlos a:
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../',
En index.php
encuentra estas líneas:
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/start.php';
Y cambiarlos a:
require __DIR__.'/laravel_code/bootstrap/autoload.php';
$app = require_once __DIR__.'/laravel_code/bootstrap/start.php';
-
Si usa Debian Linux, no olvide editar
etc/apache2/apache2.conf
cambiando deAllowOverride None
aAllowOverride All
donde ves la configuración del Directorio,<Directory /var/www/></Directory>
.– Robin Hood
20 de enero de 2015 a las 15:21
-
Solo tenía que tener el archivo .htaccess en mi directorio raíz para que funcionara.
– Mario Rodrigues
4 de febrero de 2015 a las 11:20
-
¡Mover a /root no es un buen consejo en absoluto en el modo de producción! Hay una razón por la que existe la carpeta pública
– dedo del pie
4 de abril de 2015 a las 7:44
-
Para asegurarse de que las reglas de reescritura funcionen, verifique que la configuración de apache
<Directory ...
la configuración tieneAllowOverride All'
Algo como esto:<Directory "/var/www/html/laravel/public"> Options Indexes FollowSymLinks MultiViews **AllowOverride All** </Directory>
– Japheth Ongeri – inkalimeva
20 mayo 2015 a las 18:04
-
Diablos no. Nunca hagas eso.
– Daniel Steiner
30 de mayo de 2016 a las 14:11
Intenté esto en Laravel 4.2
Renombrar el server.php
en la carpeta raíz de Laravel para index.php
y copiar el .htaccess
archivo de /public
directorio a su carpeta raíz de Laravel.
espero que funcione
-
Si la respuesta aceptada por Luazan no funciona, esto será suficiente. Aunque me aseguraría de editar el archivo index.php en la carpeta pública para redirigir a los usuarios fuera del público si van directamente a ese enlace.
– Brad pájaro
7 de marzo de 2015 a las 9:21
-
Los archivos js y css ya no se cargan desde la carpeta pública
– llioor
20 de agosto de 2015 a las 22:27
-
@MaHDyfo: ¿por qué no es seguro? y cómo ?
– 151291
15 de junio de 2018 a las 17:31
-
@ 151291 porque el archivo .env es accesible para todos los que visitan su sitio de esta manera. a menos que asegure su servidor web para evitar esto.
– Mahdyfo
18 de junio de 2018 a las 16:34
Ankit Vishwakarma
No se confunda con otra opción, el fragmento a continuación que estoy usando y también será útil para usted. Coloque los htacces a continuación en su raíz.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
Vaya a su directorio público y coloque otro archivo htaccess con el fragmento de código a continuación
<IfModule mod_rewrite.c>
RewriteEngine On
# Removes index.php from ExpressionEngine URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
Esta funcionando… !!!
Usos de Laravel debajo de .htaccess
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
-
Genial: ¿puedes decirme cuáles son los pros y los contras de este método?
– Muhammad Atek
6 de septiembre de 2016 a las 5:17
-
Solo edité el .htaccess en la raíz (tu primer fragmento) y eso me lo arregló, ¡gracias!
– peird
28 de enero de 2020 a las 17:41
-
En laravel 9, esta es la única opción.
–Shalin Nipuna
11 de marzo de 2022 a las 3:19
1) Compruebe si mod_rewrite está habilitado. Ir a /etc/apache2/mods-enabled
directorio y ver si el rewrite.load
está disponible. Si no, habilítelo usando el comando sudo a2enmod rewrite
Habilitará el módulo de reescritura. Si ya está habilitado, mostrará el mensaje Module rewrite already enabled
.
2) Cree un host virtual para el directorio público para que, en lugar de dar http://localhost/public/index.php
vamos a poder usar así http://example.com/index.php
. [hence public folder name will be hidded]
3) Luego cree un .htaccess que ocultará el index.php de su url que debería estar dentro del directorio raíz (carpeta pública)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
Khandad Niazi
AQUÍ HAY PASOS SENCILLOS PARA ELIMINAR PÚBLICO EN URL (Laravel 5)
1: copie todos los archivos de la carpeta pública y péguelos en la carpeta raíz de laravel
2: Abra index.php y cambie
De
require __DIR__.'/../bootstrap/autoload.php';
A
require __DIR__.'/bootstrap/autoload.php';
Y
$app = require_once __DIR__.'/../bootstrap/app.php';
A
$app = require_once __DIR__.'/bootstrap/app.php';
En laravel 4 la ruta 2 es $app = require_once __DIR__.'/bootstrap/start.php';
en lugar de $app = require_once __DIR__.'/bootstrap/app.php';/app.php
Eso es.
-
¿Hay alguna otra complicación con respecto a otros enlaces desde el sitio?
– Haring10
7 de diciembre de 2015 a las 9:56
-
Eso parece una gran solución y simple también. Pero realmente, como dijo Haring10. ¿Hay algún problema con esto?
– Pedro
30 de marzo de 2016 a las 9:21
Udhav Sarvaiya
Para Laravel 4 y 5:
- Rebautizar
server.php
en su carpeta raíz de Laravel paraindex.php
- Copia el
.htaccess
archivo de/public
directorio a tu Laravel carpeta raíz.
Eso es todo !! 🙂
-
¿Hay alguna otra complicación con respecto a otros enlaces desde el sitio?
– Haring10
7 de diciembre de 2015 a las 9:56
-
Eso parece una gran solución y simple también. Pero realmente, como dijo Haring10. ¿Hay algún problema con esto?
– Pedro
30 de marzo de 2016 a las 9:21
Comunidad
Es probable que esto tenga muy poco que ver con Laravel y mucho que ver con las configuraciones de Apache.
¿Tiene acceso a la configuración de su servidor Apache? Si es así, mira esto, de los documentos:
En general, solo debe usar archivos .htaccess cuando no tenga acceso al archivo de configuración del servidor principal. Existe, por ejemplo, un concepto erróneo común de que la autenticación de usuario siempre debe realizarse en archivos .htaccess y, en años más recientes, otro concepto erróneo de que las directivas mod_rewrite deben ir en archivos .htaccess. Esto simplemente no es el caso. Puede poner configuraciones de autenticación de usuario en la configuración del servidor principal y, de hecho, esta es la forma preferida de hacer las cosas. Asimismo, las directivas mod_rewrite funcionan mejor, en muchos aspectos, en la configuración del servidor principal.
… En general, se debe evitar el uso de archivos .htaccess cuando sea posible. Cualquier configuración que considere colocar en un archivo .htaccess, puede realizarse con la misma eficacia en una sección del archivo de configuración de su servidor principal.
Fuente: Documentación de apache.
La razón por la que menciono esto primero es porque es mejor deshacerse de .htaccess
completamente si puedes, y usa un Directory
etiqueta dentro de un VirtualHost
etiqueta. Dicho esto, el resto de esto supondrá que te quedas con el .htaccess
ruta por cualquier razón.
Para desglosar esto, podrían estar sucediendo un par de cosas:
-
Observo, quizás sin sentido, que su archivo se llama
.htacces
en tu pregunta Supongo que es un error tipográfico, pero en caso de que lo hayas pasado por alto y, de hecho, solo le falte la segunda s, este es exactamente el tipo de error menor que me dejaría golpeándome la cabeza contra la pared buscando algo más desafiante. . -
Su servidor podría no estar permitiendo
.htaccess
. Para verificar esto, vaya a su archivo de configuración de Apache. En las compilaciones modernas de Apache, esto generalmente no está en un archivo de configuración, así que asegúrese de estar usando el que apunta a su aplicación, donde sea que exista. CambiarAllowOverride none
a
AllowOverride all
Como seguimiento, los documentos de Apache también recomiendan que, por motivos de seguridad, no haga esto para cada carpeta si va a buscar
.htaccess
por reescribir. En su lugar, hágalo para las carpetas que necesita agregar.htaccess
a. -
Tiene
mod_rewrite
¿activado? Eso podría estar causando los problemas. Veo que tienes la etiqueta en la parte superior<IfModule mod_rewrite.c>
. Intente comentar esas etiquetas y reinicie Apache. Si obtiene un error, probablemente se deba a que necesita habilitarmod_rewrite
: Cómo habilitar mod_rewrite para Apache 2.2
Espero que esto ayude. He nombrado algunos de los problemas más comunes, pero hay varios otros que podrían ser más mundanos o únicos. ¿Otra sugerencia sobre un servidor de desarrollo? Vuelva a instalar Apache. Si es posible, hágalo desde una fuente diferente con un buen tutorial.
-
Gran captura para la configuración de apache2, echo de menos esta configuración cada vez.
– Abhishek
18 de junio de 2018 a las 10:36
Bonitas URL en Laravel. Cerciorarse
mod_rewrite
está habilitado.– Kryten
23 mayo 2014 a las 20:36
stackoverflow.com/questions/21662378/…
– El Alfa
23 mayo 2014 a las 20:39
@Kryten no funciona =/
– Tu Gordo Bello
26 mayo 2014 a las 19:13
Esta es la solución cuando la otra solución no funciona. dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts
– Tu Gordo Bello
28 mayo 2014 a las 19:38
¿La raíz de su documento apunta a la carpeta deseada, es decir,
/var/www/project_name/public
– Kiee
25 de octubre de 2014 a las 10:48