2

这条路线不匹配:

 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。

请给个主意?

4

1 回答 1

0

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 的代码库是否已更改。)

于 2013-07-28T06:43:39.670 回答