ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 路由如何大小写不区分
<code class="lang-php">//D:/website/zbphp.com/www/Laravel/app/routes.php Route::group(array('prefix'=>'admin'),function(){ Route::get('login','admin\HomeController@login'); }); </code>
当网址是 http://localhost/ADMIN/LOGIN/ 报错无法访问
如何大小写不区分
<code class="lang-php">//D:/website/zbphp.com/www/Laravel/app/routes.php Route::group(array('prefix'=>'admin'),function(){ Route::get('login','admin\HomeController@login'); }); </code>
当网址是 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(更非入口文件).
<code>App::before(function($request) { $fullUrl = $request->fullUrl(); if(preg_match('@[A-Z]@', $fullUrl)) return Redirect::to(Str::lower($fullUrl)); }); </code>
还有另一种方法,就是错误出现时,再进行大小写转换
这个得在app/start/global.php
<code>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)); }); </code>
其实这两种方法都是下下策...
还有,为什么我说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.phppassthru('"'.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));
}