Laravel Redirect :: route()在vhost上转到错误的url

时间:2013-10-15 20:30:10

标签: php laravel laravel-4 vhosts

我今天正在处理一些代码并发送了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

2 个答案:

答案 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';
        }
    ]
);

您可以看到我们使用响应重定向本身使用它来发送标头位置:)