【问题标题】:Handle url's character casing in Laravel?在 Laravel 中处理 url 的字符大小写?
【发布时间】:2015-12-06 11:10:21
【问题描述】:

如何将以下网址重定向到小写网址?

http://domain.com/City/really-long-slug-from-db/photos

http://domain.com/city/Really-Long-Slug-From-Db/photos

http://domain.com/City/really-long-slug-from-db/Photos

http://domain.com/city/really-long-slug-from-db/photos

这是我的路线:

Route::any('/{city}/{slug}/{page?}', 
    array(
        'as' => 'slug-page', 
        function($city, $slug, $page="info"){
        return View::make('default.template.'.$page)
            ->with('city', $city)
            ->with('page',$page)
            ->with('slug', $slug);
        }
    ))
    ->where(
        array(
            'city'   => '[a-z ]+',
            'page'   => '[a-z-]+',
            'slug'  => '(about|photos|videos)'
    ));

目前我使用正则表达式 [a-z-]+ 仅匹配较小的大小写字符串,并且出于显而易见的原因抛出 NotFoundHttpException。 如何在不区分大小写的字符串和 301 重定向(以避免重复的 url)中接受所有这些参数到 Laravel 5.1 中的小写 url?

【问题讨论】:

  • 是否有任何理由创建区分大小写的 slug?或在您的网址中使用区分大小写?我不经常看到这种情况发生,只是想知道原因。无论如何,最简单的方法是将 slug 更改为小写。不幸的是,我不知道如何直接回答您的问题:/
  • 只接受所有字母(大写和小写)并制作中间件来检测是否有大写字母,而不是重定向到小写网址

标签: php laravel routing laravel-5 laravel-5.1


【解决方案1】:

您可以使用 路由中间件轻松做到这一点。中间件应检查路径中是否有任何大写字符并重定向到小写版本。

首先,定义中间件类:

class RedirectToLowercase
{
  public function handle($request, Closure $next) {
    $path = $request->path();
    $pathLowercase = strtolower($path); // convert to lowercase

    if ($path !== $pathLowercase) {
      // redirect if lowercased path differs from original path
      return redirect($pathLowercase);
    }

    return $next($request);
  }
}

然后在您的 Kernel.php 中注册新的中间件

protected $routeMiddleware = array(
  // ... some other middleware classes ...
  'lowercase'       => 'App\Http\Middleware\RedirectToLowercase'
);

最后,应用中间件到你的路由:

Route::any('/{city}/{slug}/{page?}', array(
  'as' => 'slug-page', 
  'middleware' => 'lowercase', 
  function() {
    // your code
  })
);

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2013-04-14
    相关资源
    最近更新 更多