我的网络应用需要使用
将用户重定向到外部网站redirect()->away($url).
但是,如果网址不包含“http://”或“https://”,则无效。由于网址是用户定义的,因此我认为这不是手动添加“http://”或“https://”的好方法。 Laravel有什么方法可以用来将用户重定向到外部网站而无需添加“http(s)://”?
答案 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建议的那样,使用验证来强制用户输入绝对网址。