如何使用大写或小写在laravel中创建URL?

时间:2018-03-10 05:50:02

标签: laravel laravel-5 routes

对于SEO,我需要以大写或小写的形式创建URL。

例如(原始网址):

https://example.com/CATEGORY/product

如果用户运行此网址:

https://example.com/category/product or https://example.com/CATEGORY/PRODUCT

转换为:

https://example.com/CATEGORY/product

如何在web.php中创建此网址?

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的特定问题,则希望将用户重定向到     https://example.com/CATEGORY/product 如果它们击中包含相同字符但使用不同大写字母的网址,例如     https://example.com/category/product

可以通过在@Chris答案中的路由中添加重定向逻辑来处理这种重定向。

Route::get('{category}/{product}', function($category, $product) 
{
    if(strtoupper($category) != $category || strtolower($product) != $product) {
        return redirect(strtoupper($category).'/'.strtolower($product));
    }

    $product = Product::where('product_title', strtolower($product))
        ->and('category', strtolower($category))
        ->get();

    return $product;
});

Laravel默认返回302代码,指示临时重定向。这是因为意外发送一个临时重定向比意外发送一个永久重定向好得多。在这种情况下,听起来您可能想使其永久化,因此请将返回代码添加到您的重定向调用中。

return redirect(strtoupper($category).'/'.strtolower($product), 301);

这样,他们的浏览器就会记住始终要选择的路线。它还将指示搜索引擎索引正确的网址。

与Apache不同,Nginx网址区分大小写。这是为了提高性能。 Laravel路由也区分大小写。因此,如果使用Laravel + Nginx堆栈,则必须在所有路由中考虑大小写。您可以在Nginx配置中处理重定向,但是在这种情况下,在http://example.com/ / 上进行匹配可以轻松捕获您不想要的URL。

答案 1 :(得分:0)

这样的事情会起作用(我正在假设你使用的类别和产品参数是什么。

my $ssh = Net::OpenSSH->new($remote_addr);
my $outstr = $ssh->capture('sed', '-n', "/$last_hour/,\$p", "$dir/$remote_file");

关键点:

  • 路由器不关心它的大写还是小写
  • 你,需要建立如何从一个案例转换到另一个案例 - 在上面的例子中,我只是转换为小写(但你可能需要使用studley案例,烤肉串案例等(结帐Laravel助手的一部分)文档))。