Nuevo en Symfony 4.1: redirecciones inteligentes
Históricamente las URL han seguido el modelo de UNIX que añade una barra al final en los directorios pero no en los archivos:
https://example.com/foo/
se considera un directorio llamadofoo
https://example.com/foo
se considera un archivo sin extensión llamadofoo
Aunque es posible servir contenidos diferentes para /foo
y /foo/
(de hecho,
Google también lo admite) hoy en día es común tratar a las dos URLs como la
misma y redirigir entre ellas.
Desde su primera versión Symfony ha solucionado una de las dos partes de este
problema. Si una ruta define un path
con una barra al final, las dos URLs
funcionan sin problemas (y la URL sin barra redirige automáticamente a la otra):
# config/routes.yaml foo_route: path: '/foo/' controller: App\Controller\DefaultController::foo
En este ejemplo, una petición GET /foo/
devuelve una respuesta 200
y una
petición GET /foo
devuelve una respuesta 301
(Moved Permanently) que
redirige a /foo/
. Este mecanismo solo se aplica en las peticiones GET
y HEAD
.
En Symfony 4.1 hemos mejorado el router para que también soporte el otro lado de este problema (redirigir URLs con barra a URLs sin barra). Por ejemplo:
# config/routes.yaml foo_route: path: '/foo' controller: App\Controller\DefaultController::foo
Antes de Symfony 4.1, la petición GET /foo/
resultaba en una respuesta de tipo
404
. En Symfony 4.1, esa misma petición resulta en una redirección 301
a
/foo
, por lo que la redirección de "la barra del final" por fin funciona en
los dos sentidos.
Esta funcionalidad fue contribuida por Nicolas Grekas en el pull request #26283.
Fuente: New in Symfony 4.1: Smarter URL redirections
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.