Redirecionamentos de URL Inteligentes no Symfony 4.1
Historicamente, as URLs seguiram a convenção do UNIX de adicionar barras finais aos diretórios e removê-las ao referir-se a arquivos:
https://example.com/foo/
é geralmente considerado um diretório chamadofoo
https://example.com/foo
é geralmente considerado um arquivo chamadofoo
sem qualquer extensão de arquivo.
Embora servir conteúdo diferente para /foo
e /foo/
seja ok para o Google, atualmente é comum tratar as duas URLs como a mesma URL e redirecioná-las.
Desde o primeiro dia, o Symfony ajudou em um dos dois lados deste problema. Se você definir uma rota com um caminho terminando com uma barra, as duas URLs funcionarão e a URL sem a barra redireciona para a outra:
# config/routes.yaml
foo_route:
path: '/foo/'
controller: App\Controller\DefaultController::foo
Neste exemplo, uma requisição GET /foo/
retorna uma resposta 200
e uma requisição GET /foo
retorna um redirecionamento 301
(movido permanentemente) para /foo/
. Observe que isso funciona apenas para requisições GET
e HEAD
.
No Symfony 4.1, as rotas foram aprimoradas para fazer redirecionamentos inteligentes também no outro sentido. Considere esta definição de rota:
# config/routes.yaml
foo_route:
path: '/foo'
controller: App\Controller\DefaultController::foo
Anteriormente ao Symfony 4.1, uma requisição GET /foo/
resultava em uma resposta 404
. No Symfony 4.1, resulta em um redirecionamento 301
para /foo
, fazendo com que a lógica inteligente da barra final funcione nos dois sentidos.
Tradução de: New in Symfony 4.1: Smarter URL redirections