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 4 路由 - 如果条件不满足,则可以跳过路由