Remover la carpeta public o index.php de la URL en Laravel

Muchas veces cuando estamos desarrollando un proyecto en Laravel y lo pasamos a producción, vemos errores que aparece en la URL, la carpeta public o el archivo index.php:

// Valid URL
https://example.com/blog
// Invalid URL
https://example.com/index.php/blog

https://example.com/public/blog

Lo cual, si tenemos un blog, esto nos puede traer penalizaciones con el SEO; en esta entrada vamos a ver como reparar este problema, no desde el htacces que muchas veces no funciona y que hay muchos ejemplos de como hacerlo en Internet, si no, mediante código PHP, por lo tanto, si estas desesperado, esta es la última medida que puedes implementar.

Para remover la carpeta public y/o index.php de la URL, lo que debemos de hacer es ir al proveedor de nuestra aplicación:

app/Providers/AppServiceProvider.php

Que es una especie de middleware, y creamos una función como la siguiente:

app/Providers/AppServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
class AppServiceProvider extends ServiceProvider
{
   public function boot(): void
   {
       $this->removePublicPHPFromURL();
   }
   protected function removePublicPHPFromURL()
   {
       if (Str::contains(request()->getRequestUri(), '/public/')) {
           $url = str_replace('public/', '', request()->getRequestUri());
 
           if (strlen($url) > 0) {
               header("Location: $url", true, 301);
               exit;
           }
       }
   }
}

O si quieres para remover el index.php, queda como:

 protected function removeIndexPHPFromURL()
{
        if (Str::contains(request()->getRequestUri(), '/index.php/')) {
            $url = str_replace('index.php/', '', request()->getRequestUri());
            if (strlen($url) > 0) {
                header("Location: $url", true, 301);
                exit;
            }
        }
}

En ambos casos, como puedes ver, simplemente verificamos mediante el request, si existe la carpeta de index.php o la carpeta public y la removemos, luego, hacemos una redirección de tipo 301 que significa que indica que es una redirección permanente a la misma URL quitando la carpeta public e index.php.

- Andrés Cruz

In english

Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos Curso y Libro Laravel 11 con Tailwind Vue 3, introducción a Jetstream Livewire e Inerta desde cero - 2024.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.