存在特定查询字符串时定义 Laravel 路由

Defining Laravel routes when certain query strings are present

假设我希望能够在任何页面上提交一个搜索表单,将 ?s= 添加到当前 url 但 return 一个 SERP:https://example.com/my-page?s=foobar . (我看到一些网站这样做而不是指向 /search?s=.* - 不是我这样做的方式,但它说明了我的问题。)

在我的 Laravel web.php 路线中,除了可能使用不稳定的正则表达式之外,目前是否有其他方法可以注册它?

<?php
Route::get('.+?\?.+?\bs={search}', 'SearchController@search');
// This regex is probably wrong, but you get what I was going for,
// and that kinda highlights why this is not an ideal way to do it
?>

当您想捕获多个 $_GET 参数时,这会变得更丑陋:

https://example.com/my-page?s=foobar&dept=clothing

我在 Laravel 文档中没有找到任何允许您在 Route $uri 参数上定义查询字符串选项的内容。推荐的选项是只使用漂亮的 URL (https://example.com/search/foobar),但保留查询字符串肯定有有效的用例。

1:创建一个中间件(https://laravel.com/docs/5.7/middleware) 2:使用 $request->query('s') 验证传入请求 3:如果验证成功return到下一个否则重定向到任何地方或显示错误响应

这很简单,取决于url的部分。 Route class 使用 url 的 "path string" 而你尝试使用 url 的 "parameters"。

https://doepud.co.uk/blog/anatomy-of-a-url

在现代网站中,您应该使用该结构,因为您可以获得更好的 URL 结构,而且它对 SEO 和搜索引擎来说更好。

你应该只在你调用的函数中使用参数来处理你可以通过 $request->get('s'); 方法调用的小东西,但是你必须重定向或者你必须在那个函数中工作。

所以不要与框架作斗争,并在框架中定义的结构中工作,所有了解该框架的人都知道如何使用它。