Laravel Redirect::route() 在 vhost 上转到错误的 url
Posted
技术标签:
【中文标题】Laravel Redirect::route() 在 vhost 上转到错误的 url【英文标题】:Laravel Redirect::route() going to wrong url on vhost 【发布时间】:2013-10-23 19:15:18 【问题描述】:我今天正在编写一些代码并发送了Redirect::route()
。它没有像往常一样重定向到 base_url/route,而是像这样复制了 base_url:
http://myurl.dev/http://myurl.dev/myroute
我认为我做错了什么,所以我回去尝试找出问题所在。我最终用一个新的虚拟主机开始了一个新项目,并将这一点代码放在 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 not found 错误,因为找不到http://myurl.dev/http://myurl.dev/test2。这只发生在Redirect::route()
上,它在Redirect::to()
上按预期工作。它也只发生在虚拟主机上;如果我转到 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 中添加了一些虚拟主机,这是一个:
<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
。
【问题讨论】:
您是如何设置虚拟主机的?可以发一下配置吗?我在我的 laravel 安装中测试了你的路线,我没有遇到任何问题。我认为这是关于重写模式的问题,或者您的项目中未正确设置 vhost。 @Darwing 我已经添加了我的虚拟主机设置 我现在不知道指令/标签Directory
是否真的很重要,但是您在虚拟主机配置中缺少它。在this tutorial 中,您可以看到如何使用 Laravel 正确设置 vhost 配置的说明。
【参考方案1】:
问题似乎与 URL 中有一个下划线有关,它没有通过 FILTER_VALID_URL:
https://github.com/laravel/framework/issues/2511
(我的答案不值得称赞,因为我只是整理一下以帮助其他人寻找解决方案)
【讨论】:
好人,我很遗憾我也遇到了这个问题。在我的例子中,域名中有一个破折号。另外,我正在使用一个 Route 组,它在花括号中定义了可能的子域。我有一个名为 'setup' 的路由定义为 'settings/setup' Redirect:route('setup', array('error' => '1')) 将我带到:sub.name.our-site.com/http:/subdomain。 name.our-site.com/settings/setup?error=1 这实际上是它尝试加载的 URL。连字符不应该在域名中有效吗? 祝福你!我正用头撞墙试图弄清楚这一点。【参考方案2】:试试这个方法:
Route::get(
'test1',
[
'as' => 'test1',
function ()
return Response::make('', 302)->header('Location', route('test2'));
]
);
Route::get(
'test2',
[
'as' => 'test2',
function ()
return 'test2hello';
]
);
如您所见,我们使用 Response 类,而 Redirect 本身使用它来发送标头位置 :)
【讨论】:
以上是关于Laravel Redirect::route() 在 vhost 上转到错误的 url的主要内容,如果未能解决你的问题,请参考以下文章
Redirect::route 在 Laravel 5 中的 URL 中带有参数
Laravel Redirect::route() 在 vhost 上转到错误的 url