XE3(Xpressengine 3) http에서 https로 자동으로 redirect 하기

\config\production\xe.php 파일에 아래에 작성된 코드를 추가합니다.   

'ssl' => [
   'always' => true,
],

 

(예시) 코드를 추가된 이후...

<?php

return [
    'lang' => [
        'locales' => [
            '0' => 'ko',
            '1' => 'en',
        ],
    ],
    'ssl' => [
        'always' => true,
    ],
];

 


내부에 작성된 코드가 어떻게 작동하는지 살펴보겠습니다.

HttpProtocol (위치: \app\Http\Middleware\HttpProtocol.php)클래스에 작성된 코드를 살펴보겠습니다. 

HttpProtocol 클래스는 미들웨어 클래스 입니다.

<?php

namespace App\Http\Middleware;

use Closure;

/**
 * Class HttpProtocol
 *
 * @category    Middleware
 * @package     App\Http\Middleware
 * @author      XE Developers <developers@xpressengine.com>
 * @copyright   2020 Copyright XEHub Corp. <https://www.xehub.io>
 * @license     http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL
 * @link        https://xpressengine.io
 */
class HttpProtocol
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (app('config')->get('xe.ssl.always') == true && $request->secure() == false) {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

 

아래 코드를 보면 `xe.ssl.always` 설정이 활성화 되어 있을 때, http에서 https로 자동으로 redirect 시켜 주는 걸 확인할 수 있습니다.

if (app('config')->get('xe.ssl.always') == true && $request->secure() == false) {
    return redirect()->secure($request->getRequestUri());
}

 

HttpProtocol 클래스는 웹(web) 미들웨어 그룹에서 사용되도록 등록되어 있습니다.

아래 부분은 \app\Http\Kernel.php 코드에 작성된 일부입니다.

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \App\Http\Middleware\ShareLocalizeSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        // \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,

        \App\Http\Middleware\HttpProtocol::class,
        \App\Http\Middleware\RequiredDF::class,
        \App\Http\Middleware\ExceptAppendableVerifyCsrfToken::class,
        \App\Http\Middleware\LangPreprocessor::class,
        \App\Http\Middleware\Purifying::class,
        \App\Http\Middleware\FreezeSEO::class,
        \App\Http\Middleware\AsyncExpose::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],

    'safe' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        // \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\ExceptAppendableVerifyCsrfToken::class,
    ]
];

 

  • share