Maison > développement back-end > tutoriel php > Comment rediriger les URL majuscules en minuscules avec Laravel Middleware

Comment rediriger les URL majuscules en minuscules avec Laravel Middleware

百草
Libérer: 2025-03-07 01:22:11
original
489 Les gens l'ont consulté

How to Redirect Uppercase URLs to Lowercase with Laravel Middleware

Pour optimiser l'optimisation des moteurs de recherche (SEO), je devais rediriger toutes les demandes contenant des lettres majuscules vers leurs équivalents minuscules la semaine dernière.

Exemple:

源 URL 目标 URL
/location/Atlanta /location/atlanta
/docs/Laravel-Middleware /docs/laravel-middleware

En même temps, cette solution ne doit modifier aucun paramètre de requête:

源 URL 目标 URL
/locations/United-States?search=Georgia /location/united-states?search=Georgia

Il s'avère que nous n'avons besoin que d'écrire quelques lignes de code dans le middleware de Laravel pour y parvenir! Tout d'abord, nous obtenons le chemin de la demande et vérifions s'il est le même en minuscules. S'il n'est pas pareil, nous pouvons utiliser la méthode url()->query() pour remonter la chaîne de requête vers la version minuscule du chemin et la rediriger sur le chemin en minuscules de façon permanente.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class RedirectUppercase
{
    /**
     * 处理传入请求。
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        $path = $request->path();

        if (($lower = strtolower($path)) !== $path) {
            $url = url()->to($lower)->appendQuery($request->query()); // 使用更简洁的链式调用

            return redirect($url, 301);
        }

        return $next($request);
    }
}
Copier après la connexion

Pour enregistrer le middleware dans l'application Laravel 11, je l'ai joint au groupe bootstrap/app.php middleware dans le fichier web.

<?php

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        // ...
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->appendToGroup('web', \App\Http\Middleware\RedirectUppercase::class);
    });
Copier après la connexion

Remarque: vous devrez peut-être exclure ce middleware à partir des itinéraires à l'aide d'une URL signée ou d'autres cas d'utilisation sensibles aux cas.

Je suis sûr que cela peut être fait avec Nginx ou Apache, mais c'est de loin la solution la plus simple, et cela fonctionne pour tous les environnements de votre application. Je n'ai pas à me rappeler d'apporter des modifications sur le nouveau serveur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal