【问题标题】:How to get domain root url in Laravel 4?如何在 Laravel 4 中获取域根 url?
【发布时间】:2014-09-19 16:40:39
【问题描述】:

我已经准备好尖叫这有多难?我已经努力太久了。 如果我有http://www.example.com/more/pages/page.php 或类似的,我希望能够得到 www.example.com。

仅此而已。所以我可以随心所欲地使用它。如果在生产或开发中,这当然会改变,所以我想动态确定它。

Request::root()

返回http://www.example.com/more/pages/page.php

URL::to('/')

返回http://www.example.com/more/pages/page.php

我如何得到这个?为什么我做这件事这么麻烦??

【问题讨论】:

  • 试试Request::getHttpHost(),从你的问题看来,这正是你所需要的。
  • 这似乎也确实有效,很好的提示。你在哪里找到的?
  • Request::getHost() 也可以。
  • url('') - 就是这么简单

标签: url laravel-4 root


【解决方案1】:

更新(2017-07-12)

更好的解决方案其实是使用Request::getHost()

上一个答案:

我刚刚检查过,Request::root(); 在我的情况下确实返回了http://www.example.com,无论我在哪条路线上。然后,您可以执行以下操作以剥离 http:// 部分:

if (starts_with(Request::root(), 'http://'))
{
    $domain = substr (Request::root(), 7); // $domain is now 'www.example.com'
}

如果问题仍然存在,您可能需要仔细检查或发布更多代码(routes.php、控制器代码...)。

另一种解决方案是简单地使用$_SERVER['SERVER_NAME']

【讨论】:

  • 我不知道是什么问题。现在它似乎工作正常。我测试了一个小时。我唯一能想到的是我本地主机上的 apache 中的虚拟主机不正确。我移动了公用文件夹并没有更新它。这可能影响了它。但我所描述的事情正在发生。我一直返回当前页面的 URL。我快疯了……
  • $_SERVER['SERVER_NAME'] 返回服务器主机名:“当前脚本在其下执行的服务器主机名。如果脚本在虚拟主机上运行,​​这将是为该虚拟主机定义的值。”这并不总是用户所在的 url,例如如果您的虚拟主机中有别名。请求::root();在这种情况下工作正常。
  • 最好使用正则表达式,因为如果您切换到https://,那么您的代码就会损坏。
  • 如果你想解析一个网址,我推荐parse_url
  • 如果与任何其他不包含 4 个字符的协议一起使用,此代码将被破坏
【解决方案2】:

我觉得你可以用asset('/')

【讨论】:

    【解决方案3】:

    您也可以测试以下任何一项:

    Request::server ("SERVER_NAME")
    Request::server ("HTTP_HOST")
    

    这似乎比做任何治疗都要好

    Request::root()
    

    好的。

    【讨论】:

      【解决方案4】:

      我的提示:

      1. 查找 .env 中是否存在:

        APP_URL=http://yourhost.dev

      2. 替换(或添加)

        APP_DOMAIN=yourhost.dev

      3. 在 config/app.php 中查找:

        'url' => env('APP_URL'),

      4. 替换为

        'domain' => env('APP_DOMAIN'),

        'url' => 'http://' . env('APP_DOMAIN'),

      5. 使用:

        Config::get('app.domain'); // yourhost.dev

        Config::get('app.url') // http://yourhost.dev

      6. 施展你的魔法!

      【讨论】:

      • P.S.:您可以随意添加任何环境变量并以这种方式使用它,例如:用于 api 域、用于帐户域、用于帮助文档域等。但是,您实际上并不需要在 .env 中添加开发域(如 APP_DEV_DOMAIN)。只需使用具有其他值的其他环境(develop.env、behat.env、qa.env 等)。 (对不起 ruenglish)
      【解决方案5】:

      这适用于 Laravel 5.1,我不确定它是否适用于早期版本,但如果有人在 Google 上搜索并登陆这里,它可能会在中间件句柄函数获取 $request 参数时很方便:

      $request->server->get('SERVER_NAME')
      

      在中间件句柄方法之外,您可以通过辅助函数 request() 访问它

      request()->server->get('SERVER_NAME')
      

      【讨论】:

        【解决方案6】:

        在 Laravel 5.1 及更高版本中,您可以使用

        request()->getHost();
        

        request()->getHttpHost();
        

        (如果不是标准的,第二个会添加端口)

        【讨论】:

          【解决方案7】:

          直接在你想要控制器或web.php的地方使用

          Request::getHost();
          

          【讨论】:

            猜你喜欢
            • 2018-12-30
            • 1970-01-01
            • 2016-04-02
            • 2013-07-20
            • 1970-01-01
            • 1970-01-01
            • 2013-11-25
            • 2023-03-27
            • 2010-11-15
            相关资源
            最近更新 更多