Laravel на Heroku применяет HTTP - PullRequest
0 голосов
/ 11 июня 2018

У меня есть простой маршрут, который обрабатывает перенаправления на правильные ссылки отслеживания из базы данных. Сам маршрут выглядит следующим образом -

Route::get('/{language}/go/{operator}', function($language, $operator) {
    $operator = Operator::where('language',$language)->where('name',$operator)->first();
    $tracking_url = $operator->visit_url;
    if( isset($_GET['session_id']) ) $session_id = strip_tags($_GET['session_id']);
    else $session_id = 1;

    if( $operator->dynamic_parameter ) {
        $full_url = $tracking_url.'&'.$operator->dynamic_parameter.'='.$session_id;
    }
    else {
        $full_url = $tracking_url;
    }
    return redirect($full_url)->header('Referrer-Policy', 'no-referrer');
});

Весь сайт находится на HTTPS (обрабатывается heroku) и какдополнительный слой для цепочки перенаправления. Я добавил еще 2 вещи -

1) Добавил дополнительную конфигурацию сервера (apache_app.conf) и загрузил ее с помощью procfile -

apache_app.conf

DirectoryIndex index.php index.html index.htm
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

procfile

web: vendor/bin/heroku-php-apache2 -C apache_app.conf public/

2) Принудительное перенаправление всех моих маршрутов через https, используя этот фрагмент вверху web.php -

if (env('APP_ENV') === 'prod') {
    \URL::forceScheme('https');
}

При попытке получить доступ к моему приложению через http: // - я перенаправлен на версию https: //, и, похоже, все в порядке.Но когда я исследую цепочку перенаправления с использованием конечной точки маршрута / en / go / xxxx, я получаю странное сцепление, которое включает сначала перенаправление обратно в версию http, а затем перенаправляет ее обратно в версию https.Поэтому при попытке загрузить один из этих URL-адресов отслеживания в iframe - я получаю сообщение об ошибке -

Mixed Content: The page at 'https://www.website.com/us/reviews/xxxxx' was loaded over HTTPS, but requested an insecure resource 'http://www.website.com/us/go/xxxxx?session_id=1'. This request has been blocked; the content must be served over HTTPS.

И цепочка перенаправления выглядит следующим образом -

Result
https://www.website.com/us/go/xxxxx/?session_id=332
301 Moved Permanently
http://www.website.com/us/go/xxxxx?session_id=332
301 Moved Permanently
https://www.website.com/us/go/xxxxx?session_id=332
302 Found
https://track.xxxxx.com/visit/?bta=123456&nci=654321&utm_campaign=website_camapign&afp=332

1 Ответ

0 голосов
/ 13 июня 2018

В вашем конфигурационном файле apache убедитесь, что для ServerName установлено https://www.website.com, а не http://www.website.com.

Из документов :

Иногда сервер работает за устройством, которое обрабатывает SSL, таким как обратный прокси-сервер, балансировщик нагрузки или устройство разгрузки SSL.В этом случае укажите схему https: // и номер порта, к которому подключаются клиенты, в директиве ServerName, чтобы убедиться, что сервер генерирует правильные URL-адреса с собственной ссылкой.

Возможно, поэтому первое перенаправление генерируется с использованием http вместо https при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...