Soru Nasıl prod için https zorlamak ama dev ortamı için http?


Bir symfony2 uygulamasına sahibim.

Prod sunucusunda, tüm rotalarımın https üzerinden geçmesini istiyorum, ancak http’yu kullanmak istiyorum. Bunu tek başına symfony2 ile nasıl başarabilirim? Web sunucusu yapılandırmasına dokunmak istemiyorum.

Bunu eklemeye çalıştım routing.yml

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

bunu yaparken benim routing_dev.yml:

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

_main:
    resource: routing.yml

Hala dev modunda bile https'ye gitmek istiyor.


19
2018-04-22 15:43


Menşei


olası kopyası Symfony'de, dev bir ortamda http ve üretimde https'yi nasıl talep edebilirim? - dmnptr


Cevaplar:


Bunun için parametre tanımlayabilirsiniz. İçinde app/config/config.yml tanımlamak:

parameters:
    httpProtocol: http

Daha sonra app/config/config_prod.yml:

parameters:
    httpProtocol: https

Ve routing.yml değişmek:

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

Önbelleği temizle (hem prod hem de dev) ve çalışmalı.


58
2018-04-23 05:55



Bu iyi bir fikir! Ayrıca yapılandırmak için çalışır security.yml. - Matthieu Napoli
çok iyi açıkladı - Baig
Bu durumdaki durumu bir ek açıklamada kullanmak isteyen herkes için: @Route ("/ register.html", schemes = {"% httpProtocol%"}) - Nairebis
çok kolay ve ilk kez çalıştı, teşekkürler! - Louwki


App.php'in son satırlarını şu şekilde değiştirin:

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);

2
2017-07-19 16:59



Şemayı şemada kodlamak istemem app.php Ayarları kolayca değiştirmek için yapılandırma dosyalarında böyle bir ayar olmasını tercih ederim. - k0pernikus
Http kernel koşmadan önce herhangi bir yapılandırma dosyanız yok! - zioMitch
Bu tamamen doğru değil. Lütfen kabul edilen cevaba ve cevabın benim için nasıl çalıştığına bakın. Değişiklik yok app.php orada gerekliydi. Bir çalışma çözümü sağladınız, ancak tavsiye edeceğim hiçbir şey yok. - k0pernikus
Bu ihtiyaçlarım için çalıştı. - Henry


İlk çözümüm iyi çalışıyor, ancak bir kişinin kendi rotalarının üzerine yazmamaya dikkat etmeliyim. routing_dev.yml. Dosyanın sonunda

_main:
    resource: routing.yml

böylece tüm paket rotam https şemasına geri döndü. Girişleri sipariş etmek, böylece özel girişimin son gelmesi sorunu çözdü.


0
2018-04-23 15:30



Ayarlamayı denedim schemes: [https] benim app / config / routing.yml altında resource: "@MyBundle/Resources/config/routing.yml" ama çalışmıyor (paketimde tanımlanan yollar için HTTPS'yi zorlamıyor). Kullanmadığınız rotalarda teklif ettiğiniz gibi bir şey yapmayı denediniz mi type: annotation? - RayOnAir


Şemayı kontrol edebilirsiniz. app_dev.php dosya ve üssü https’e yönlendir

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

Ya da bazı değişiklikleri .htaccess için app_dev.php URL’de


-2
2018-04-22 17:00



Ne yazık ki bu, prod'da olduğu gibi, http portu engellenemez, bu yüzden oradan herhangi bir yönlendirme yapamıyorum ve aynı zamanda sunucu yapılandırmasına bağlı olmak istemiyorum ama symfony2 config içinde elde etmemin nedeni de bu. - k0pernikus
Sadece dev mod için bunu yapmak istediğini düşündüm ve prod hem http hem de https kullanabilir - Javad
Http portu engellenirse, istek sadece apandise bile olsa apache'ye nasıl ulaşırdı? - Henry