2014-10-28 14 views
5

Mam następujący sterownik z adnotacją routingu:Symfony2 Nieskończona pętla przekierowań ze schematami routingu zachodzącego

/** 
* @Route("/checkout/", name="checkout", schemes = "https") 
*/ 
public function indexAction(Request $request) 
{ 
    //...do stuff 
} 

Działa to dobrze na moim serwerze rozwoju, jednak na moim serwerze produkcyjnym, mam nieskończoną drogę przekierowania. Przejrzałem logi i jest to spowodowane przez Symfony, a nie Apache. Czyni to w kółko, aż moja przeglądarka zatrzymuje:

[2014-10-28 17:32:28] request.INFO: Matched route "checkout" (parameters: "_controller": "Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction", "path": "/checkout/", "permanent": "true", "scheme": "https", "httpPort": "80", "httpsPort": "443", "_route": "checkout") [] [] 

to nie ma sensu, ponieważ żądana strona jest poprzez https:

https://example.com/checkout/

mam żadnych ustawień access_control w security.yml które to pokrywają. Dziwne jest to, że wszystkie inne kontrolery, które nie używają "schematów =" https ", działają

+0

Czy próbowałeś [wymuszając https w security.yml] (http://symfony.com/doc/master/cookbook/security/force_https.html)? – lsouza

+0

Nie, to tylko w moim routingu. –

Odpowiedz

2

Okazuje się, że moja konfiguracja SSL jest ustawiona na poziomie serwera zamiast na poziomie VirtualHost, którego Apache nie był ustawiony Zmienna PHP Server "HTTPS", mimo że używana była HTTPS, jest to zmienna, którą Symfony wykorzystuje do określenia, czy żądanie jest bezpieczne, czy też nie. Dodanie różnych dyrektyw SSL bezpośrednio do mojego wpisu VirtualHost rozwiązuje problem. pomaga to komuś

+0

Można również ustawić zmienną środowiskową dla PHP> SetEnv HTTPS On – Geoffroy

4

Jest możliwe, że twoja aplikacja Symfony znajduje się za proxy/load balancer, który kończy SSL (haproxy, nginx). Te serwery proxy zwykle dodają specjalny nagłówek informujący aplikację, że pierwotne żądanie zostało wysłane za pośrednictwem HTTPS Problem polega na tym, że Symfony ignoruje ten nagłówek jako i Zbyt łatwe do podszycia.

go naprawić dodać następującą linię do swojej strony internetowej/app.php po $ żądanie jest inicjowane:

// Trust all requests as they can only come from the load balancer 
Request::setTrustedProxies(array($request->server->get('REMOTE_ADDR'))); 

to powie Symfony, że może zaufać nagłówka schematu i przekierowanie do HTTPS nie jest potrzebne.

+0

Dziękuję bardzo, to rozwiązało problem, z jakim miałem do czynienia na heroku –

Powiązane problemy