Laravel,如何重定向为 301 和 302

问题描述 投票:0回答:7

我在 Laravel 文档中找不到重定向为 301/302 的信息。

在我的routes.php 文件中我使用:

Route::get('foo', function(){ 
    return Redirect::to('/bar'); 
});

默认是 301 还是 302?有没有办法手动设置?知道为什么这会从文档中省略吗?

laravel laravel-4 http-status-codes
7个回答
96
投票

当你不确定的时候,你可以查看 Laravel 的 API 文档和源代码。 Redirector 类 定义

$status = 302
作为默认值。

您可以使用

to()
方法定义状态代码:

Route::get('foo', function(){ 
    return Redirect::to('/bar', 301); 
});

18
投票

我更新了 Laravel 5 的答案! 现在您可以在文档中找到重定向助手

return redirect('/home');

return redirect()->route('route.name');

像往常一样..每当你不确定时,你可以查看 Laravel 的 API 文档 以及源代码。 Redirector 类 定义 $status = 302 作为默认值(302 是临时重定向)。

如果您希望有永久 URL 重定向(HTTP 响应状态代码 301 永久移动),您可以使用 redirect() 函数定义状态代码:

Route::get('foo', function(){ 
    return redirect('/bar', 301); 
});

9
投票

martinstoeckli 的答案适用于静态 url,但对于动态 url,您可以使用以下内容。

对于动态 URL

Route::get('foo/{id}', function($id){ 
    return Redirect::to($id, 301); 
});

实例(我的用例)

Route::get('ifsc-code-of-{bank}', function($bank){ 
    return Redirect::to($bank, 301); 
});

这将重定向 http://swiftifsccode.com/ifsc-code-of-sbihttp://swiftifsccode.com/sbi

再举一个例子

Route::get('amp/ifsc-code-of-{bank}', function($bank){ 
    return Redirect::to('amp/'.$bank, 301); 
});

这会将 http://amp/swiftifsccode.com/ifsc-code-of-sbi 重定向到 http://amp/swiftifsccode.com/sbi


6
投票

Laravel 301和302使用redirect()和route()进行重定向

301(永久):

return redirect(route('events.show', $slug), 301);

302(临时):

默认情况下,Route::redirect 返回 302 状态代码。

return redirect()->route('events.show', $slug);

Laravel 官方文档,“重定向路由”:https://laravel.com/docs/5.8/routing#redirect-routes


5
投票

您可以像这样定义直接重定向路由规则:

Route::redirect('foo', '/bar', 301);

3
投票

从 Laravel 5.8 开始,你可以指定

Route::redirect
:

Route::redirect('/here', '/there');

默认情况下,将使用 302 HTTP 状态代码进行重定向,这意味着临时重定向。如果页面永久移动,您可以指定 301 HTTP 状态代码:

Route::permanentRedirect('/here', '/there');
/* OR */
Route::redirect('/here', '/there', 301);

Laravel 文档:https://laravel.com/docs/5.8/routing#redirect-routes


0
投票

不确定这是否会对任何人有帮助。我正在使用 Laravel Forge 处理别名域。我尝试了

redirect('http://aliasdomain.com', 301)
并收到服务器错误。我必须使用
redirect()->to('http://aliasdomain.com', 301)->send()
才能让它发挥作用。

© www.soinside.com 2019 - 2024. All rights reserved.