我今天正在处理一些代码并发送了Redirect::route()
。它没有像往常一样重定向到base_url / route,而是像这样重复了base_url:
http://myurl.dev/http://myurl.dev/myroute
我认为我做错了什么,所以我回去试图找出问题所在。我最终用新的vhost启动了一个新项目,并将这些代码放在 app / routes.php 中:
Route::get(
'test1',
[
'as' => 'test1',
function () {
return Redirect::route('test2');
}
]
);
Route::get(
'test2',
[
'as' => 'test2',
function () {
return 'test2hello';
}
]
);
当我在浏览器中打开http://myurl.dev/test1时,由于找不到http://myurl.dev/http://myurl.dev/test2而不是仅显示“test2hello”,而是发送了http并未找到错误。这仅在Redirect::route()
上发生,它在Redirect::to()
上按预期工作。它也只发生在虚拟主机上;如果我转到localhost / myurl / public / test1,Redirect::route()
按预期工作。有什么想法吗?
更新:
我被问到我的虚拟机设置。我在Mac OSX 10.8.5上使用内置Apache。我已取消注释 /etc/apache2/httpd.conf 中的 httpd-vhosts.conf include行。我在 /etc/apache2/extra/httpd-vhosts.conf 中添加了几个vhost,这里有一个:
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/Documents/example_blog/public"
ServerName example_blog.local
</VirtualHost>
以及 / etc / hosts 中的相应行:
127.0.0.1 example_blog.local
并重新启动Apache。该文件夹名为example_blog.local
。
答案 0 :(得分:5)
问题似乎与在URL中使用下划线有关,但不会传递FILTER_VALID_URL:
https://github.com/laravel/framework/issues/2511
(因为我只是整理了这个以帮助其他人寻找解决方案,所以我没有信任我的答案)
答案 1 :(得分:1)
试试这个方法:
Route::get(
'test1',
[
'as' => 'test1',
function () {
return Response::make('', 302)->header('Location', route('test2'));
}
]
);
Route::get(
'test2',
[
'as' => 'test2',
function () {
return 'test2hello';
}
]
);
您可以看到我们使用响应类重定向本身使用它来发送标头位置:)