Home > Backend Development > PHP Tutorial > How to Redirect Uppercase URLs to Lowercase with Laravel Middleware

How to Redirect Uppercase URLs to Lowercase with Laravel Middleware

百草
Release: 2025-03-07 01:22:11
Original
489 people have browsed it

How to Redirect Uppercase URLs to Lowercase with Laravel Middleware

To optimize search engine optimization (SEO), I needed to redirect all requests containing uppercase letters to their lowercase equivalents last week.

Example:

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

At the same time, this solution should not change any query parameters:

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

It turns out that we only need to write a few lines of code in the Laravel middleware to achieve it! First, we get the path from the request and check if it is the same in lowercase. If it is not the same, we can use the url()->query() method to append the query string back to the lowercase version of the path and redirect it to the lowercase path permanently.

<?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);
    }
}
Copy after login

To register the middleware in the Laravel 11 application, I attached it to the bootstrap/app.php middleware group in the web file.

<?php

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        // ...
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->appendToGroup('web', \App\Http\Middleware\RedirectUppercase::class);
    });
Copy after login

Note: You may need to exclude this middleware from routes using a signed URL or other case-sensitive use cases.

I'm sure it can be done with Nginx or Apache, but this is by far the easiest solution, and it works for all environments of your application. I don't have to remember to make any changes on the new server.

The above is the detailed content of How to Redirect Uppercase URLs to Lowercase with Laravel Middleware. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template