Laravel route()返回裸IP地址而不是域

时间:2015-05-07 06:28:10

标签: php nginx dns ip laravel-routing

没有在我的本地计算机上捕获这个但我注意到我的一些页面返回了我的Web服务器的裸IP地址而不是域名。例如:

route('homepage')有时会返回192.XX8.X.2XX192.XX8.X.2XX/index.phpdomain.com/index.php。我的页面在第一次访问时被缓存,并且页面上的所有URL都有可能出现奇怪的50%。

对这种奇怪的行为有解释吗?我该如何解决?自从Googlebot列出我网站的另外三个副本以来,这是一个非常令人担忧的问题。

注意:我也在为我的路线使用LaravelLocalization包:https://github.com/mcamara/laravel-localization

我也在Laravel Forge(Nginx)下运行这个应用程序

2 个答案:

答案 0 :(得分:4)

我明白,这个问题很老了,但我遇到了同样的问题并找到了解决方案。 (它可以帮助某人)

在此路径上打开文件 RouteServiceProvider:app/Providers/RouteServiceProvider.php

寻找函数 mapWebRoutes。现在我们必须从我们的环境中添加带有配置的调用者 domain

protected function mapWebRoutes()
{
    Route::middleware('web')
        ->namespace($this->namespace)
        ->domain(\Config::get('app.url', null))
        ->group(base_path('routes/web.php'));
}

在基于路由构建 url 期间 - 系统尝试获取当前路由中的局部变量 domain,如果找到 - 域应立即应用。但如果属性未定义 - 转到 Symphony 路由模块。

PS:不要忘记在 .env 文件中设置 APP_URL。 示例:

APP_URL=https://mysimpledomain.ua

答案 1 :(得分:0)

这很可能取决于您的nginx配置。如果仅在服务器上配置了应用程序,则它将作为默认应用程序。当您通过服务器的IP地址(或链接到服务器的任何其他域)直接访问服务器时,nginx将为laravel应用提供服务。

有很多方法可以解决这个问题。我建议为服务器配置一个默认值。这可能只是一个HTML页面,上面写着“恭喜您已经到达服务器”或类似内容。另一个就是重新配置您应用程序的nginx文件,以将不是正确域的任何内容重定向到您应用程序的域名。

server {
    if ($host != example.com) {
        return 301 https://example.com$request_uri;
    }
    listen 80;
    server_name example.com;
}

有关nginx如何在此处处理请求的更多信息:http://nginx.org/en/docs/http/request_processing.html