【问题标题】:Append trailing slash to url in Laravel 4在 Laravel 4 中将斜杠附加到 url
【发布时间】:2013-11-22 21:32:32
【问题描述】:

简单的问题,但我找不到任何有效的答案:

如何在 Laravel 4 中将斜杠附加到 url?

【问题讨论】:

  • 何时:在您的路由中,或在您生成 URL 时?
  • 我的路由最后没有 / 定义,因为 Laravel 总是在没有它的情况下重定向到 url,所以路由不会被命中。实际上只有我的一条路线需要斜杠

标签: php laravel laravel-4


【解决方案1】:

编辑:正如 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

【讨论】:

    【解决方案2】:

    如果你使用的是 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,这样可以在模板中节省一个额外的字符!

    【讨论】:

    • 但这意味着每次更新文件时我们都必须更改它。
    • 好吧,然后向 Laravel 提交错误报告。 Laravel 中的许多代码部分都假设不会有斜杠。
    • 我最终创建了四个类,它们分别继承自 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”文件中的重写。
    • @TylerCrompton,您是否有机会在 GitHub 上为世界其他地方分享您的代码,并将其作为答案发布?
    猜你喜欢
    • 2011-01-04
    • 2016-05-19
    • 2018-12-28
    • 2012-03-31
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多