Php 拉威尔4号:路线不';与尾随斜杠不匹配,如何制作?

Php 拉威尔4号:路线不';与尾随斜杠不匹配,如何制作?,php,laravel,laravel-4,routes,Php,Laravel,Laravel 4,Routes,此路线不匹配: Route::get('/{cat}/', array('as' => 'article_cat', 'uses' => 'ArticleController@cat')) ->where('cat', $pattern_str); 不带尾随斜杠的路径匹配。 这不是错误的原因,我使用尾部斜杠URL进行了测试,并替换了public/index.php的内容。它是ok domain.com/the-cat/display index.php内容。

此路线不匹配:

 Route::get('/{cat}/',
    array('as' => 'article_cat', 'uses' => 'ArticleController@cat'))
    ->where('cat', $pattern_str);
不带尾随斜杠的路径匹配。 这不是错误的原因,我使用尾部斜杠URL进行了测试,并替换了public/index.php的内容。它是ok domain.com/the-cat/display index.php内容。 但不适用于Laravel4

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


有什么想法吗?

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

对于Laravel来说,最好的办法是声明您的路由,而不使用后面的斜杠,并强制Apache在任何传入URL上添加斜杠

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

Route::get('my/page' ...);
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/[L,R=301 ]
您的超文本访问(.htaccess)
RewriteRule
如下所示:

Route::get('my/page' ...);
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将在不使用尾部隐藏的情况下重定向。。。无限重定向。在拉威尔,这种奇怪的行为太多了。下一个项目我将测试Sylex,但对于这个项目,我必须用Laravel完成。我明白了-Laravel以前没有这样做过。Silex做到了这一点:如果您用一个尾随斜杠声明一条路由,它将始终强制斜杠。然而,拉雷维尔会忽略这一点。如果用斜杠加载路线,那么Laravel无论如何都会加载它。这是我的经验。