2017-06-07 259 views
1

今天,我决定将我的网站迁移到HTTPS。早期我的网站在HTTP上工作。Laravel HTTPS路线

我的问题是误解Laravel如何通过HTTP和HTTPS助手功能route('name')

我改变config/app.php我的网站的URL https://www.domain.name,我认为,这个解决方案可以帮助我。但是我得到了一个奇怪的结果。

php artisan tinker如果我通过route('ROUTE.NAME')我得到了正确的链接https://www.domain.name/route/path 但在刀片模板我http://www.domain.name/route/path

同样的情况与\URL::to('/')

也许有人能向我解释为什么会这样?

+0

什么是完全写在你的'config/app.php'中?难道是另一个url被定义在根目录下的'.env'文件中,并且'env()'正在加载它? – UfguFugullu

+0

您是使用'http'还是'https'在浏览器中访问网站? –

+0

@UfguFugullu .env我通过https://www.domain.name和config/app.php – Mgorunuch

回答

0

的@dekts反应是正确的,但“正确”地方放这些东西是“应用/供应商/ AppServiceProvider.php”关于启动方法。

//file: app/Providers/AppServiceProvider.php 
use Illuminate\Support\Facades\URL; 

class AppServiceProvider extends ServiceProvider { 

    public function boot() 
    { 
     if (app()->environment('remote')) { 
      URL::forceScheme('https'); 
     } 
    } 

    ... 
} 

您还可以添加一个新的变量上的 “.ENV” 的文件,是这样的:

#file: .env 
FORCE_HTTPS=true 

和更改条件

//file: app/Providers/AppServiceProvider.php 
public function boot() 
{ 
    if(env('FORCE_HTTPS')) { 
     URL::forceScheme('https'); 
    } 
} 

希望这有助于。

1

我为此奋斗了很长时间。我的解决办法是把我的routes.php文件文件中的下列(你可能更喜欢一个不同的地方吧)

我也缠此行条件语句,所以它仅适用于我的远程配置:

if (App::environment('remote')) { 
    URL::forceSchema('https'); 
} 

您可以尝试在boot方法中添加您的AppServiceProvider。 这里:app/Providers/AppServiceProvider.php

或者另一种方式:

所以我想通了。这不是那么容易,但在你的AppServiceProvider.php你必须添加:$this->app['request']->server->set('HTTPS', true);register方法。这就是我想出来的。

Btw。设置APP_URL不会对您的应用程序的HTTP一侧产生任何影响,这是针对工匠的。

PS。 CloudFlare的HTTPS重新写入也是不错的主意:)