2014-04-22 16 views
18

Ho un'applicazione symfony2.Come forzare https per prod ma http per ambiente dev?

Sul server prod. Voglio che tutte le mie route vadano via https, mentre in dev voglio essere in grado di usare http. Come ottengo ciò con symfony2 da solo? Non voglio toccare la configurazione del server web.

Ho provato ad aggiungere questo nel mio routing.yml

myBundle: 
    resource: "@MyBundle/Controller/" 
    type:  annotation 
    prefix: /
    schemes: [https] 

pur avendo questo nel mio routing_dev.yml:

myBundle: 
    resource: "@MyBundle/Controller/" 
    type:  annotation 
    prefix: /
    schemes: [http] 

_main: 
    resource: routing.yml 

E ha ancora voglia di andare a https anche in modalità dev.

+1

possibile duplicato (http://stackoverflow.com/questions/16971030/in-symfony-how-can-i-require-http-in-a-dev-ambiente-e-https-in-produzione) – dmnptr

risposta

52

È possibile definire parametri per quello. In app/config/config.yml definire:

parameters: 
    httpProtocol: http 

Poi nel app/config/config_prod.yml:

parameters: 
    httpProtocol: https 

E in routing.yml modifica:

myBundle: 
    resource: "@MyBundle/Controller/" 
    type:  annotation 
    prefix: /
    schemes: ['%httpProtocol%'] 

Svuota cache (sia prod e dev) e dovrebbe funzionare.

+4

Questa è una buona idea! Funziona anche per la configurazione di 'security.yml'. –

+0

molto ben spiegato – Baig

+3

Per chiunque voglia utilizzare questo caso caso in un'annotazione, questo è il modo: @Route ("/ register.html", schemi = {"% httpProtocol%"}) – Nairebis

-2

penso che è possibile controllare il regime in app_dev.php file e la base su cui destinarli a HTTPS

$url = parse_url($_SERVER['HTTP_REFERER']); 
if ($url['scheme'] == 'http') { 
    header("Location: https://{$_SERVER['SERVER_NAME']}{$_SERVER['PHP_SELF']}"); 
} 

O forse in grado di applicare alcune modifiche in .htaccess per app_dev.php in URL

+1

Purtroppo questo non è possibile, come su prod, la porta http è bloccato, quindi non posso effettuare alcun reindirizzamento da lì ed è anche il motivo per cui non voglio dipendere da serveride config ma farlo all'interno di symfony2 config. – k0pernikus

+0

Ho pensato di volerlo fare solo per la modalità dev e il prod può usare sia http e https – Javad

+0

Se la porta http è bloccata, in che modo la richiesta raggiungerebbe anche apache, per non parlare di symfony – Henry

0

La mia prima soluzione funziona bene, tuttavia bisogna fare attenzione a non sovrascrivere le proprie route nel routing_dev.yml. Alla fine del file, ho avuto

_main: 
    resource: routing.yml 

quindi tutto il mio percorso fagotto è stato cambiato di nuovo alla https-schema. Ordinando le voci, in modo che la mia voce personalizzata venga risolta l'ultima volta.

+0

Ho provato a impostare 'schemi: [https]' nella mia app/config/routing.yml sotto 'risorsa:" @ MyBundle/Resources/config/routing.yml "' ma non funziona (non impone HTTPS per i percorsi definiti nel mio pacchetto). Hai provato a fare qualcosa come ti proponi in percorsi che non usano il 'type: annotation'? – RayOnAir

2

Cambia la tua app.php ultime righe in questo modo: [? In Symfony, come posso richiedere http in un ambiente dev e https nella produzione]

if ($request->getScheme() === 'http') { 
    $urlRedirect = str_replace($request->getScheme(), 'https', $request->getUri()); 
    $response = new RedirectResponse($urlRedirect); 
} else { 
    $response = $kernel->handle($request); 
} 

$response->send(); 

$kernel->terminate($request, $response); 
+0

Non vorrei hardcode il schema in 'app.php', preferisco avere tale impostazione nei file di configurazione per modificare facilmente le impostazioni – k0pernikus

+0

Non hai alcun file di configurazione prima che il kernel http sia in esecuzione! – zioMitch

+0

Questo non è completamente vero. Si prega di guardare la risposta accettata e la risposta su come ho funzionato per me .Non ci sono state necessarie modifiche all'appsh. Avevi fornito una soluzione funzionante, ma nessuna che io raccomandassi. – k0pernikus

Problemi correlati