如何在Laravel 4中获取域根URL?

Sha*_*ane 26 url root laravel-4

我准备好尖叫这有多难?我一直在努力.如果我有http://www.example.com/more/pages/page.php或类似内容,我希望能够获得www.example.com.

就这样.所以我可以随意使用它.如果在生产或开发中,这当然会改变,所以我想动态地确定它.

Request::root()
Run Code Online (Sandbox Code Playgroud)

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

URL::to('/')
Run Code Online (Sandbox Code Playgroud)

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

我怎么得到这个?为什么我这么做有这么多麻烦?

low*_*nds 40

更新时间(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'
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 最好使用正则表达式,因为如果你切换到`https://`那么你的代码就会被破坏. (4认同)

Sei*_*oan 30

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

Request::server ("SERVER_NAME")
Request::server ("HTTP_HOST")
Run Code Online (Sandbox Code Playgroud)

它似乎比做任何治疗更好

Request::root()
Run Code Online (Sandbox Code Playgroud)

行.


Mar*_*łek 15

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

request()->getHost();
Run Code Online (Sandbox Code Playgroud)

要么

request()->getHttpHost();
Run Code Online (Sandbox Code Playgroud)

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

  • 您还可以使用 request()->getSchemeAndHttpHost() 来获取带有 http:// 的 url (2认同)

kiv*_*ant 12

我的提示:

  1. 找到.env中的EXISTS:

    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. 做你的魔法!

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

Zor*_*ran 8

这是为Laravel 5.1而且我不确定它是否适用于早期版本,但是如果有人在谷歌上搜索并在这里登陆它可能会在中间件处理函数中获得$ request参数:

$request->server->get('SERVER_NAME')
Run Code Online (Sandbox Code Playgroud)

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

request()->server->get('SERVER_NAME')
Run Code Online (Sandbox Code Playgroud)