讨论 使用交流 解决:怎样让导航链接不区分大小写

解决:怎样让导航链接不区分大小写

zqiqi 发表于    阅读:368    回复:0

问题描述:

正常链接为 http://cms.com/Message

怎样访问 http://cms.com/message 时也可以正常访问页面。

环境信息:

PHP版本8.1、系统版本  cms laravel9

解决:

1、在app\Http\ 中添加文件 CaseInsensitiveUriValidator.php

app\Http\CaseInsensitiveUriValidator.php 文件代码内容:

<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Illuminate\Routing\Route;
use Illuminate\Routing\Matching\ValidatorInterface;

// URL不区分大小写
class CaseInsensitiveUriValidator implements ValidatorInterface
{    
    public function matches(Route $route, Request $request)
    {
        $path = $request->path() == '/' ? '/' : '/' . $request->path();
        return preg_match(preg_replace('/$/', 'i', $route->getCompiled()->getRegex()), rawurldecode($path));
    }
}

2、 在 module\Cms\Web\routes.php 文件顶部添加以下内容:

<?php
// URL不区分大小写
use Illuminate\Routing\Route as IlluminateRoute;
use App\Http\Middleware\CaseInsensitiveUriValidator;
use Illuminate\Routing\Matching\UriValidator;

$validators = IlluminateRoute::getValidators();
$validators[] = new CaseInsensitiveUriValidator;

IlluminateRoute::$validators = array_filter($validators, function($validators) {
    return get_class($validators) != UriValidator::class;
});


3、在module/Cms/Util/CmsCatUtil.php上修改 getByUrl方法。

public static function getByUrl($url)
{
    $url = strtolower($url);
    foreach (self::all() as $item) {
        if (strtolower($item['url']) == $url) {
            return $item;
        }
    }
    return null;
}


// 这样URL可以不区分大小写了。

我来评论
QQ
微信
客服