logo
Secciones

Entradas del blog


Eliminar segmento public en Laravel 10

Sin comentarios

Contexto

Ésto es más que nada por comodidad, y solo debe usar en entorno de desarrollo de la aplicación web que se este trabajando, ya que como tal en producción, se debe utilizar el directorio public para poner los archivos públicos de los proyectos en Laravel.

La idea

Cuando se crea un proyecto en laravel, por defecto se debe utilizar php artisan serve y la IP en la que se mostrará la aplicación, sin embargo, si se hace un storage link, entonces se puede acceder vía url a la aplicación directa sin necesidad de lanzar la aplicación mediante php artisan serve.

La url por defecto es la siguiente:

http://localhost/laravel/public/

Sin embargo, lo ideal y estético sería utilizar la url sin ese segmento de public:

http://localhost/laravel/

Proceso

Realizar éstos cambios implica realizar los siguientes pasos:

Copiar los archivos index.php y .htaccess del directorio public/ y copiarlos al directorio root del proyecto, es decir, a la raíz del proyecto que se esté trabajando.

.htaccess

Una vez realizada la copia de archivos, abrir el archivo .htaccess y agregar al final del mismo las siguientes líneas:

# Disable directory browsing
Options All -Indexes

# ----------------------------------------------------------------------
# Rewrite engine
# ----------------------------------------------------------------------

# Turning on the rewrite engine is necessary for the following rules and features.
# FollowSymLinks must be enabled for this to work.
<IfModule mod_rewrite.c>
	Options +FollowSymlinks
	RewriteEngine On

	# If you installed CodeIgniter in a subfolder, you will need to
	# change the following line to match the subfolder you need.
	# http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
	# RewriteBase /

	# Redirect Trailing Slashes...
	RewriteCond %{REQUEST_FILENAME} !-d
    	RewriteRule ^(.*)/$ /$1 [L,R=301]

	# Rewrite "www.example.com -> example.com"
	RewriteCond %{HTTPS} !=on
	RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
	RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

	# Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to the front controller, index.php
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ index.php/$1 [L]

	# Ensure Authorization header is passed along
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    ErrorDocument 404 index.php
</IfModule>

# Disable server signature start
    ServerSignature Off
# Disable server signature end

<Files .env>
order allow,deny
Deny from all
</Files>

index.php

Abrir el archivo index.php y buscar las siguientes dos líneas, y cambiarlas como se muestra:

require __DIR__.'/../vendor/autoload.php';

[...]

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

Cambiar el código a lo siguiente:

require __DIR__.'/vendor/autoload.php';

[...]

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

Lanzando cambios

Finalmente en el archivo .env del directorio raíz, se debe establecer la url completa de la aplicación web:

APP_URL=http://localhost/laravel/

Ahora solo iniciar desde el navegador con esa url, y listo:

Gracias por visitar

Fuentes:
- https://stackoverflow.com/questions/62128581/how-to-remove-public-from-url-in-laravel#62128647

Comentarios:

Conoce la red social linuxClick
Redes sociales
Accesos directos