Laravel 4:路线与斜杠不匹配,如何制作?

Posted

技术标签:

【中文标题】Laravel 4:路线与斜杠不匹配,如何制作?【英文标题】:Laravel 4 : Route doesn't match with trailing slash, how to make? 【发布时间】:2013-07-28 01:09:43 【问题描述】:

这条路线不匹配:

 Route::get('/cat/',
    array('as' => 'article_cat', 'uses' => 'ArticleController@cat'))
    ->where('cat', $pattern_str);

没有尾随斜线的路由匹配。 这不是 Apache 错误的原因,我使用尾部斜杠 URL 并替换了 public/index.php 的内容进行了测试。没关系 domain.com/the-cat/ 显示 index.php 内容。 但不适用于 Laravel4。

我发现了很多关于这个问题的消息和问题,但没有解决方案。 我的客户使用这种类型的 URL,并且不想在其网站的新版本(正常)中更改 URL。

请给个主意?

【问题讨论】:

【参考方案1】:

Silex 微框架在这方面做得更好 - 它强制执行您想要的(出于 SEF 目的)。

对于 Laravel,你最好的选择是声明你的路由没有尾部斜杠,并强制 Apache 在任何传入的 URL 上添加斜杠。

因此,路由定义如下所示:

Route::get('my/page' ...);

您的超文本访问 (.htaccess) RewriteRule 如下所示:

RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.*)([^/])$ http://%HTTP_HOST/$1$2/[L,R=301 ]

该代码块应该在任何其他代码块之前 - 它甚至应该是第一个被执行的规则。

因此,当您访问my/page 时,您将被重定向到my/page/,但会加载GET my/page 路由。

(注意:这适用于我的项目 - 我不知道 Laravel 的代码库是否已更改。)

【讨论】:

感谢您的回复,但 Apache 不是解决方案,因为它是 Laravel 强迫这种行为。 如果 Apache 使用尾部斜杠重定向,Laravel 将重定向而不使用尾部 stash ...无限重定向。 Laravel 中这种类型的奇怪行为太多了。下一个项目我将测试 Sylex,但对于这个项目,我必须使用 Laravel 完成。 我明白了——Laravel 以前没有这样做过。 Silex 这样做:如果您声明带有尾部斜杠的路由,它将始终强制使用斜杠。然而,Laravel 会忽略它。如果你用斜线加载了路由,那么 Laravel 无论如何都会加载它。这是我的经验。

以上是关于Laravel 4:路线与斜杠不匹配,如何制作?的主要内容,如果未能解决你的问题,请参考以下文章

未定义路由 [threads.storev]。 Laravel 8 如何制作这条路线?

如何在laravel中制作多条路线

Laravel 4 路由 - 如果条件不满足,则可以跳过路由

如何在 Destroy 函数中删除具有多个参数的数据 - Laravel

如何使 Laravel 中的路线不区分大小写?

如何在Symfony 4.1中禁用尾部斜杠重定向?