如何使用laravel处理混合内容?

时间:2019-05-31 23:27:13

标签: laravel mixed-content

我需要为应用程序@ work处理资产中的混合内容。

我发现很少的解决方案。 而且我想知道哪种方法更好实施(或者可能要更改一个Apache配置)

  • 第一个是在AppServiceProvider文件的启动方法中编写此代码:

    \URL::forceScheme('https');

  • 另一种解决方案是创建一个新的提供程序并将其添加到引导方法中:

view()->composer(['app'], function($view) use($request) {
   $secureProtocol = false;
   if(config('app.env') === "production") {
       // this is for avoiding problems in local
       $secureProtocol = true;
   }
   $view->with([
       'secureProtocol' => $secureProtocol
   ]);
});

然后在资产助手中使用它:

 <link rel="stylesheet" href="{{ asset('css/style.css', $secureProtocol) }}" type="text/css">

问题出在反向代理上,当我通过https获取网站时,反向代理正在通过http发送资产。

反向代理通过HTTP与apache服务器“对话”,但没有“重写” URLS来匹配浏览器和反向代理之间的主要请求所使用的协议。 然后$_SERVER['REQUEST_SCHEME']总是等于'http'

我对这些服务器绝对没有控制权(而且我根本不掌握apache的配置),但是如果有人可以告诉我什么地方出了问题,我可以要求更改配置。

最后我无法真正告诉您更多原因,因为我被困在保密条款的后面

2 个答案:

答案 0 :(得分:0)

如果您的反向代理行为正确,那么只需通过受信任的代理配置告诉Laravel trust its X-Forwarded-For and X-Forwarded-Proto headers。市场上任何主要的代理解决方案都应该发送这些消息-如果这很奇怪而且是自酿的,则您可能需要问题中概述的更黑客的解决方法。

答案 1 :(得分:0)

jekinney在laracasts上发布的解决方案是我用于可移植性的解决方案,因为在laravel 5.5之前我也正在使用它。

但是官方解决方案(信任转发标头)必须考虑在内。

<?php
namespace App\Providers;

use Illuminate\Routing\UrlGenerator;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot(UrlGenerator $url)
    {
        if(env('APP_ENV') !== 'local')
        {
            $url->forceSchema('https');
        }
    }