¿Cómo puedo eliminar “public/index.php” en la URL de Laravel generada? [duplicate]

9 minutos de lectura

Avatar de usuario de TuGordoBello
tugordobello

necesito quitar index.php o public/index.php de la URL generada en Laravel; comúnmente la ruta es localhost/public/index.php/someWordForRoutedebe 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?

  • 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

Avatar de usuario de Luzan Baral
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:
ingrese la descripción de la imagen aquí

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

Fuente: Cómo eliminar /público/ de la URL en Laravel

  • Si usa Debian Linux, no olvide editar etc/apache2/apache2.conf cambiando de AllowOverride None a AllowOverride 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 tiene AllowOverride 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

Avatar de usuario de Ankit Vishwakarma
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 rewriteHabilitará 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]

Avatar de usuario de Khandad Niazi
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

Avatar de usuario de Udhav Sarvaiya
Udhav Sarvaiya

Para Laravel 4 y 5:

  1. Rebautizar server.php en su carpeta raíz de Laravel para index.php
  2. 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

Avatar de usuario de la comunidad
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:

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

  2. 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. Cambiar

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

  3. 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 habilitar mod_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

¿Ha sido útil esta solución?