HTTP не се пренасочва към HTTPS за определени маршрути

Наскоро преминах към използване на HTTPS на моя сървър, намерих някакъв код онлайн, който принуждава всички входящи заявки към сървъра да използват HTTPS:

<?php namespace App\Http\Auth\Middleware;

use Closure;

class HttpsProtocol {

    public function handle($request, Closure $next)
    {
        if (!$request->secure() && env('APP_ENV') === 'production') {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }

}

И добавих \App\Http\Auth\Middleware\HttpsProtocol::class към моя междинен софтуер.

Сега обаче имам следния маршрут:

Route::controller('test', 'TestController');

И следния контролер:

<?php namespace App\Http\FrontEnd\Controllers;

use App\Http\FrontEnd\Requests;
use App\Http\FrontEnd\Controllers\Controller;

use Illuminate\Http\Request;
use App\Http\FrontEnd\Requests\TestRequest;

use App\Commands\SendEmail, App\Commands\SendSMS;

use Auth, Input, DB, Session, Queue, Crypt;

class TestController extends Controller {

    public function postCheck()
    {
        //
    }

    public function postConfirm()
    {
        //
    }

}

Сега този конкретен маршрут няма да работи, ако се опитам да публикувам на следния URL адрес:

/test/confirm

Работи само когато използвам https и не мога да разбера защо или как да го поправя.


person user3718908    schedule 15.02.2016    source източник
comment
Наистина ли имахте предвид Route::controller('test', 'TestController'); или беше Route::resources('test', 'TestController');   -  person Jilson Thomas    schedule 15.02.2016
comment
Да, имах предвид route::controller   -  person user3718908    schedule 15.02.2016
comment
Не мисля, че можете да определите такъв маршрут.   -  person Jilson Thomas    schedule 15.02.2016
comment
Какво имаш предвид? Това е, което използвах, проверете документите на laravel.   -  person user3718908    schedule 15.02.2016
comment
Извинявай моя грешка. Не видях това.   -  person Jilson Thomas    schedule 15.02.2016
comment
Сигурни ли сте, че е свързано с https, защото изглежда не обработвате пространството от имена на вашия контролер във вашия маршрут. Трябва да е Route::controller('test', 'FrontEnd\TestController'); вярвам.   -  person user1669496    schedule 15.02.2016
comment
Всъщност този маршрут е част от няколко други маршрута в route::group. Посочвам пространството от имена вътре в групата маршрути, така че да засяга всички тях.   -  person user3718908    schedule 15.02.2016


Отговори (1)


Може да искате да разгледате този въпрос/отговор: Laravel 5 - htaccess HTTPS пренасочване на пощенски маршрути не работи.

Докато този въпрос се занимава с пренасочвания на htaccess, принципът е същият.

По принцип, когато клиент получи достъп до http версията на URL адреса, вашият код отговаря с пренасочване 302 към клиента, като му казва да използва https URL адреса. След това клиентът прави нова заявка към https URL, но неправилно използва GET заявка и също така премахва оригиналните POST данни.

За да разрешат проблема с клиентите, които неправилно променят метода на заявка при пренасочвания, те излязоха с нов код за състояние на пренасочване 307, който, когато бъде внедрен, е специално предназначен да пренасочва, без да променя метода на заявка. Можете да опитате да разрешите този проблем, като отговорите с 307, но тъй като е въведен в HTTP/1.1, няма гаранция, че клиентът ще разбере как да се справи с него.

За да отговорите с пренасочване 307 във вашия код:

return redirect()->secure($request->getRequestUri(), 307);

Въпреки това, всяко заобиколно решение всъщност просто побеждава целта да се изисква HTTPS навсякъде. Ако клиент изпрати POST до незащитен URL адрес, публикуваните данни може вече да са били компрометирани. Най-добрият ви залог е всъщност просто да отхвърлите POST заявки към незащитени URL адреси, за да сте сигурни, че хората не смятат, че е добре да ПУБЛИКУВАТЕ към вашите незащитени URL адреси.

person patricus    schedule 15.02.2016
comment
Уау, това обяснява много! Научих нещо ново! Благодаря много за отделеното време. :) - person user3718908; 16.02.2016