繁体   English   中英

Laravel HTTPS 路由

[英]Laravel HTTPS routes

今天我决定将我的网站移至 HTTPS。 早期我的网站在 HTTP 上工作。

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

我将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('/')相同的情况

也许有人可以向我解释为什么会发生这种情况?

@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');
        }
    }

    ...
}

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

#file: .env
FORCE_HTTPS=true

并将条件更改为

//file: app/Providers/AppServiceProvider.php
public function boot()
{
    if(env('FORCE_HTTPS',false)) { // Default value should be false for local server
        URL::forceScheme('https');
    }
}

希望这有帮助。

编辑:修正forceSchemaforceScheme上的评论中指出。 ;)

我为此苦苦挣扎了多年。 我的解决方案是将以下内容放在我的 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方法中。 我就是这样想出来的。

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

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

在 .env 文件中

FORCE_HTTPS=true

在 app/Providers/AppServiceProvider.php

public function boot()
{
    if(env('FORCE_HTTPS',false)) { 
        URL::forceScheme('https');
    }
}

5.4之后方法名是forceScheme

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

"Method Illuminate\Routing\UrlGenerator::forceSchema does not exist."

自动检测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');
      }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM