【问题标题】:Redirect to external website in Laravel without adding http(s)://在 Laravel 中重定向到外部网站而不添加 http(s)://
【发布时间】:2015-09-22 09:34:57
【问题描述】:

我的网络应用需要使用

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

但是,如果 url 不包含 "http://""https://",这将不起作用。因为 url 是用户定义的,所以我认为手动添加 "http://""https://" 不是一个好方法。 Laravel 中有什么方法可以用来将用户重定向到外部网站而无需添加 "http(s)://"

【问题讨论】:

标签: laravel laravel-5.1


【解决方案1】:

在 Laravel 中没有任何东西会强制传递给 away()$url 成为外部 URL。使用away() 是为了让 Laravel 不会强迫它成为一个内部 url。

您可以使用parse_url 来检查HOST 部分是否存在。如果是这样,它是一个绝对 URL,将按照您的预期重定向。如果没有,请在重定向 url 的开头添加一个“//”,这样它就会重定向。

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

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

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

【讨论】:

    【解决方案2】:

    是的,强制用户使用简单的正则表达式验证规则输入它:'url' => 'regex:#^https?://#'

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 2013-09-09
      • 2016-10-07
      • 2012-06-11
      • 2019-03-14
      相关资源
      最近更新 更多