首頁  >  問答  >  主體

php - Laravel 路由如何大小写不区分

//D:/website/google.com/www/Laravel/app/routes.php
Route::group(array('prefix'=>'admin'),function(){

    Route::get('login','admin\HomeController@login');
});

当网址是 http://localhost/ADMIN/LOGIN/ 报错无法访问
如何大小写不区分

黄舟黄舟2749 天前943

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理2017-04-10 14:54:42

    强制对来路url全部转为小写,在主入口文件 server.php 里面可以操作。

    @kankana 牛逼,服!

    回覆
    0
  • 怪我咯

    怪我咯2017-04-10 14:54:42

    这个没啥好方法.
    要嘛,你定义route使用的是pattern
    参考这里 http://stackoverflow.com/questions/21731151/laravel-case-insensitive-routes
    要嘛,想ls说的, 转换为小写.
    处理这类(route)事情的正确文件是app/filters.php 而不是server.php(更非入口文件).

    App::before(function($request)
    {
        $fullUrl = $request->fullUrl();
        if(preg_match('@[A-Z]@', $fullUrl))
            return Redirect::to(Str::lower($fullUrl));
    
    });
    

    还有另一种方法,就是错误出现时,再进行大小写转换
    这个得在app/start/global.php

    App::error(function(Symfony\Component\HttpKernel\Exception\NotFoundHttpException $exception, $code)
    {
        $fullUrl = Request::fullUrl();
        if(preg_match('@[A-Z]@', $fullUrl))
            return Redirect::to(Str::lower($fullUrl));
    
    });
    

    其实这两种方法都是下下策...

    还有,为什么我说server.php不是入口文件呢?

    因为这是 PHP's internal web server, 详细情况你可以参考,我就不多说了.

    http://stackoverflow.com/questions/16919920/what-is-the-purpose-of-the-server-php-file-in-laravel-4

    你要是用的apache/nginx来运行laravel,你必须指向public/index.php,而非server.php. 所以你要是向ls所说,将这些操作直接修改在server.php, 在生产环境中(nginx/apache)是不可能起效的.

    对了,artisan serve这个命令就是可以启动 PHP's internal web server, 这时server.php就是入口文件了.

    这命令文件Illuminate\Foundation\Console\ServeCommand.php
    passthru('"'.PHP_BINARY.'"'." -S {$host}:{$port} -t \"{$public}\" server.php");

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 14:54:42

    extend Router class 重写这个method应该就可以了
    protected function addRoute($methods, $uri, $action)
    {
    return $this->routes->add($this->createRoute($methods, strtolower($uri), $action));
    }

    回覆
    0
  • 取消回覆