Laravel,如何重定向为301和302

Jus*_*tin 37 http-status-codes laravel laravel-4

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

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

Route::get('foo', function(){ 
    return Redirect::to('/bar'); 
});
Run Code Online (Sandbox Code Playgroud)

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

mar*_*kli 78

无论何时您不确定,您都可以使用源代码查看Laravel的API文档.该重定向器类定义$status = 302为默认值.

您可以使用以下to()方法定义状态代码:

Route::get('foo', function(){ 
    return Redirect::to('/bar', 301); 
});
Run Code Online (Sandbox Code Playgroud)

  • 使用Laravel 5,您现在还可以使用简单的函数重定向('/ bar',301). (4认同)
  • 你也可以包含一个路由名称,`redirect(null, 301)->route('name')` (2认同)

Luc*_*ini 15

我更新了Laravel 5的答案!现在你可以在docs redirect helper上找到:

return redirect('/home');

return redirect()->route('route.name');
Run Code Online (Sandbox Code Playgroud)

像往常一样..每当您不确定时,您可以查看Laravel的API文档和源代码.该重定向器类定义了一个$状态= 302作为默认值(302是临时重定向).

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

Route::get('foo', function(){ 
    return redirect('/bar', 301); 
});
Run Code Online (Sandbox Code Playgroud)

  • `->status(301)` 对我不起作用。相反,我必须执行`return redirect()->route('series', [], 301);` 第二个数组是路由所需的任何参数,即slug 或id。 (3认同)
  • 你应该可以做`return redirect()->route('series')->setStatusCode(301);` (3认同)
  • 有一种方法可以使用301重定向到命名路由?可能是`return redirect() - > route('series') - > status(301);`但我不确定. (2认同)

Dar*_*phy 6

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

301(永久):

return redirect(route('events.show', $slug), 301);
Run Code Online (Sandbox Code Playgroud)

302(临时):

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

return redirect()->route('events.show', $slug);
Run Code Online (Sandbox Code Playgroud)

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


Abh*_*oel 5

martinstoeckli的答案对于静态URL很好,但是对于动态URL,您可以使用以下内容。

对于动态网址

Route::get('foo/{id}', function($id){ 
    return Redirect::to($id, 301); 
});
Run Code Online (Sandbox Code Playgroud)

实时示例(我的用例)

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

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

再举一个例子

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

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


StR*_*StR 5

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

Route::redirect('foo', '/bar', 301);
Run Code Online (Sandbox Code Playgroud)