【发布时间】:2013-11-22 21:32:32
【问题描述】:
简单的问题,但我找不到任何有效的答案:
如何在 Laravel 4 中将斜杠附加到 url?
【问题讨论】:
-
何时:在您的路由中,或在您生成 URL 时?
-
我的路由最后没有 / 定义,因为 Laravel 总是在没有它的情况下重定向到 url,所以路由不会被命中。实际上只有我的一条路线需要斜杠
简单的问题,但我找不到任何有效的答案:
如何在 Laravel 4 中将斜杠附加到 url?
【问题讨论】:
编辑:正如 timgws 提到的,这个解决方案不再适用于 Laravel 4.1+
如果你在 bootstrap/start.php 中注释掉第 16 行
https://github.com/laravel/laravel/blob/master/bootstrap/start.php#L16
//$app->redirectIfTrailingSlash();
它不应再重定向到不带斜杠的 URL。
然后您可以重做您的路线以显示尾部斜线,例如:
Route::get('login/', function() { // etc
【讨论】:
如果你使用的是 Laravel 4.0 (not 4.1),你应该注释掉 bootstrap/start.php 中的第 16 行 (https://github.com/laravel/laravel/blob/master/bootstrap/start.php#L16)
//$app->redirectIfTrailingSlash();
Laravel 4.1 删除了 redirectIfTrailingSlash,因为它现在可以在 .htaccess 文件中进行控制(因为它本来应该是这样的!)。
您可能还想更改 vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php so that generated URLs 在它们的末尾添加一个斜线。
public function to($path, $parameters = array(), $secure = null) {
// ...
return trim($root.'/'.trim($path.'/'.$tail, '/'), '/') . '/';
}
更改此代码后,使用 URL 生成器(例如 URL::to())的模板和代码现在将生成 URL 末尾带有斜杠的 URL,这样可以在模板中节省一个额外的字符!
【讨论】:
Illuminate\Foundation\Application、Illuminate\Http\Request、Illuminate\Routing\RoutingServiceProvider 和 Illuminate\Routing\UrlGenerator。它们在不同的非全局命名空间中具有相同的名称。我覆盖了Illuminate\Foundation\Application::requestClass、Illuminate\Foundation\Application::registerRoutingProvider、Illuminate\Http\Request::url、Illuminate\Routing\RoutingServiceProvider::registerUrlGenerator 和Illuminate\Routing\UrlGenerator::to。我还修改了“.htaccess”文件中的重写。