在不添加http(s)的情况下重定向到Laravel中的外部网站://

时间:2015-09-22 00:49:14

标签: laravel laravel-5.1

我的网络应用需要使用

将用户重定向到外部网站
redirect()->away($url). 

但是,如果网址不包含“http://”“https://”,则无效。由于网址是用户定义的,因此我认为这不是手动添加“http://”“https://”的好方法。 Laravel有什么方法可以用来将用户重定向到外部网站而无需添加“http(s)://”

1 个答案:

答案 0 :(得分:1)

Laravel中没有任何内容可以强制$url传递给away()作为外部网址。使用away()是因为Laravel不会强迫它成为内部网址。

您可以使用parse_url检查主机部分是否存在。如果是,则它是绝对URL,并将按预期重定向。如果没有,请在重定向网址的开头添加“//”,以便重定向。

redirect()->away((is_null(parse_url($url, PHP_URL_HOST)) ? '//' : '').$url);

注意,检查HOST,而不是SCHEME。如果用户输入“//google.com”,这是正确的,并会按预期重定向,但该方案为空。

或者,正如@Thomas建议的那样,使用验证来强制用户输入绝对网址。