Laravel HTTPS路由

Mgo*_*uch 4 php laravel-5

今天,我决定将网站移至HTTPS。早期,我的网站使用HTTP。

我的问题是误解了Laravel如何在helpers函数中传递HTTP和https route('name')

我将网站网址更改config/app.phphttps://www.domain.name,我认为此解决方案对我有帮助。但是我得到了一个奇怪的结果。

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

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

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

小智 12

@dekts响应是正确的,但是在引导方法上,放置此类内容的“ 正确 ”位置是“ app / Providers / 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');
        }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

您还可以在“ .env ”文件上添加一个新变量,例如:

#file: .env
FORCE_HTTPS=true
Run Code Online (Sandbox Code Playgroud)

并将条件更改为

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

希望能有所帮助。

  • 应该是: URL::forceScheme('https'); (3认同)

dek*_*kts 7

我为此苦苦挣扎了多年。我的解决方案是将以下内容放在我的 routes.php 文件中(您可能更喜欢不同的地方)

我还在这一行周围包装了一个条件语句,因此它仅适用于我的远程配置:

if (App::environment('remote')) {
    URL::forceSchema('https');
}
Run Code Online (Sandbox Code Playgroud)

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

或者另一种方式:

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

顺便提一句。设置对您的应用程序APP_URL没有任何作用HTTP,它是为工匠准备的。

附注。CloudFlareHTTPS重写也是个好主意:)


Yas*_*ser 6

在 .env 文件中

FORCE_HTTPS=true
Run Code Online (Sandbox Code Playgroud)

在 app/Providers/AppServiceProvider.php

public function boot()
{
    if(env('FORCE_HTTPS',false)) { 
        URL::forceScheme('https');
    }
}
Run Code Online (Sandbox Code Playgroud)

5.4之后方法名是forceScheme

如果你使用' forceSchema ' 会得到一个错误

"Method Illuminate\Routing\UrlGenerator::forceSchema does not exist."
Run Code Online (Sandbox Code Playgroud)


小智 6

自动检测http/https

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\Request;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
      /* Use https links instead http links */
      if (Request::server('HTTP_X_FORWARDED_PROTO') == 'https')
      {
         URL::forceScheme('https');
      }
    }
}
Run Code Online (Sandbox Code Playgroud)