php - redirigir - ¿Cómo forzar https para prod, pero http para el entorno dev?
redireccionar http a https php (4)
Cambia tus ultimas lineas de app.php asi:
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);
Tengo una aplicación symfony2.
En el servidor prod. Quiero que todas mis rutas se realicen a través de https, mientras que en dev quiero poder usar http. ¿Cómo puedo lograr eso con Symfony2 solo? No quiero tocar la configuración del servidor web.
Intenté agregar esto en mi routing.yml
myBundle:
resource: "@MyBundle/Controller/"
type: annotation
prefix: /
schemes: [https]
mientras tengo esto en mi routing_dev.yml
:
myBundle:
resource: "@MyBundle/Controller/"
type: annotation
prefix: /
schemes: [http]
_main:
resource: routing.yml
Todavía quiere ir a https incluso en modo dev.
Creo que puedes revisar el esquema en el archivo app_dev.php
y basarlo en eso redirigirlo a https
$url = parse_url($_SERVER[''HTTP_REFERER'']);
if ($url[''scheme''] == ''http'') {
header("Location: https://{$_SERVER[''SERVER_NAME'']}{$_SERVER[''PHP_SELF'']}");
}
O tal vez pueda aplicar algunos cambios en .htaccess
para app_dev.php
en la URL
Mi primera solución funciona bien, pero uno debe tener cuidado de no sobrescribir las propias rutas en routing_dev.yml
. Al final del archivo, tuve
_main:
resource: routing.yml
por lo que toda la ruta de mi paquete se cambió de nuevo al esquema https. Ordenar las entradas, para que mi entrada personalizada venga por última vez, resolvió el problema.
Puedes definir el parámetro para eso. En app/config/config.yml
define:
parameters:
httpProtocol: http
Luego en app/config/config_prod.yml
:
parameters:
httpProtocol: https
Y en routing.yml
cambia a:
myBundle:
resource: "@MyBundle/Controller/"
type: annotation
prefix: /
schemes: [''%httpProtocol%'']
Borre la memoria caché (prod y dev) y debería funcionar.