当前位置:Gxlcms > PHP教程 > Laravel路由如何大小写不区分

Laravel路由如何大小写不区分

时间:2021-07-01 10:21:17 帮助过:7人阅读

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

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

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

回复内容:

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

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

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

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

@kankana 牛逼,服!

这个没啥好方法.
要嘛,你定义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");

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

人气教程排行