Laravel Redirect::route() 在 vhost 上指向错误的 url


Laravel Redirect::route() going to wrong url on vhost

我今天正在处理一些代码并发送了Redirect::route()。它没有像往常一样重定向到base_url/路由,而是像这样复制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 时,它不只是显示"test2hello",而是抛出并且 http 未找到错误,因为找不到 http://myurl.dev/http://myurl.dev/test2。这只发生在Redirect::route()上,它在Redirect::to()上按预期工作。它也只发生在 vhost 上; 如果我转到 localhost/myurl/public/test1,Redirect::route()按预期工作。有什么想法吗?


更新:

我被要求提供我的虚拟主机设置。我使用的是Mac OSX 10.8.5,并且正在使用内置的Apache。我已经取消了 /etc/apache2/httpd.conf 中的 httpd-vhosts.conf 包含行注释。我已经在/etc/apache2/extra/httpd-vhosts.conf 中添加了一些 vhosts,这是一个:

<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/example_blog/public"
    ServerName example_blog.local
</VirtualHost>

以及/etc/hosts 中的相应行:

127.0.0.1   example_blog.local

并重新启动了阿帕奇。该文件夹名为 example_blog.local

问题似乎与URL中的下划线有关,该下划线不会传递FILTER_VALID_URL:

https://github.com/laravel/framework/issues/2511

(我的答案不值得称赞,因为我只是在整理这个以帮助其他人寻找解决方案)

试试这个方法:

Route::get(
    'test1',
    [
        'as' => 'test1',
        function () {
            return Response::make('', 302)->header('Location', route('test2'));
        }
    ]
);
Route::get(
    'test2',
    [
        'as' => 'test2',
        function () {
            return 'test2hello';
        }
    ]
);

如您所见,我们使用响应类,重定向本身使用它来发送标头位置:)