Trabajando en mi primer proyecto de Laravel 5 y no estoy seguro de dónde o cómo colocar la lógica para forzar HTTPS en mi aplicación. El factor decisivo aquí es que hay muchos dominios que apuntan a la aplicación y solo dos de cada tres usan SSL (el tercero es un dominio de respaldo, una larga historia). Así que me gustaría manejar esto en la lógica de mi aplicación en lugar de .htaccess.
En Laravel 4.2 logré la redirección con este código, ubicado en filters.php
:
App::before(function($request)
{
if( ! Request::secure())
{
return Redirect::secure(Request::path());
}
});
Estoy pensando que Middleware es donde se debería implementar algo como esto, pero no puedo resolverlo usándolo.
¡Gracias!
ACTUALIZAR
Si está utilizando Cloudflare como yo, esto se logra agregando una nueva regla de página en su panel de control.
php
laravel
laravel-routing
laravel-5
NocheMICU
fuente
fuente
$_SERVER['HTTP_HOST']
Respuestas:
Puede hacer que funcione con una clase de Middleware. Déjame darte una idea.
Luego, aplique este middleware a cada solicitud agregando la configuración de la regla en el
Kernel.php
archivo, así:En el ejemplo anterior, el middleware redirigirá cada solicitud a https si:
production
. Entonces, simplemente ajuste la configuración de acuerdo con sus preferencias.Cloudflare
Estoy usando este código en un entorno de producción con un SSL WildCard y el código funciona correctamente. Si lo elimino
&& App::environment() === 'production'
y lo pruebo en localhost, la redirección también funciona. Entonces, tener o no un SSL instalado no es el problema. Parece que necesita prestar mucha atención a su capa de Cloudflare para ser redirigido al protocolo Https.Editar 23/03/2015
Gracias a
@Adam Link
la sugerencia de: es probable que sea causado por los encabezados que está pasando Cloudflare. Es probable que CloudFlare llegue a su servidor a través de HTTP y pase un encabezado X-Fordered-Proto que declara que está reenviando una solicitud HTTPS. Necesita agregar otra línea en su Middleware que diga ...... confiar en los encabezados que envía CloudFlare. Esto detendrá el ciclo de redireccionamiento
Editar 27/09/2016 - Laravel v5.3
Solo necesita agregar la clase de middleware al
web
grupo enkernel.php file
:Editar 23/08/2018 - Laravel v5.7
App::environment() === 'production'
. Para la versión anterior eraenv('APP_ENV') === 'production'
.\URL::forceScheme('https');
realidad no redirige. Simplemente crea enlaces conhttps://
una vez que se renderiza el sitio web.fuente
$request->setTrustedProxies( [ $request->getClientIp() ] );
que confíe en los encabezados que CloudFlare está enviando. Esto detendrá el ciclo de redireccionamiento.return redirect()->secure($request->getRequestUri(), 301);
$request->server('HTTP_X_FORWARDED_PROTO') != 'https'
esto funcione para míOtra opción que funcionó para mí, en AppServiceProvider coloque este código en el método de arranque:
La función escrita antes de forceSchema ('https') era incorrecta, su forceScheme
fuente
\URL::forceScheme('https');
if($this->app->environment() === 'production'){ $this->app['request']->server->set('HTTPS', true); }
\URL::forceScheme('https')
Alternativamente, si está usando Apache, puede usar el
.htaccess
archivo para hacer que sus URL usenhttps
prefijo. En Laravel 5.4, agregué las siguientes líneas a mi.htaccess
archivo y funcionó para mí.fuente
RewriteCond %{HTTP_HOST} !=localhost
en dev para evitar esto.para laravel 5.4 use este formato para obtener la redirección https en lugar de .htaccess
fuente
Similar a la respuesta de manix pero en un solo lugar. Middleware para forzar HTTPS
fuente
Esto es para Larave 5.2.xy versiones posteriores. Si desea tener una opción para servir algún contenido a través de HTTPS y otros a través de HTTP, aquí hay una solución que funcionó para mí. Quizás se pregunte, ¿por qué alguien querría ofrecer solo algunos contenidos a través de HTTPS? ¿Por qué no servir todo a través de HTTPS?
Aunque está totalmente bien servir todo el sitio a través de HTTPS, cortar todo a través de HTTPS tiene una sobrecarga adicional en su servidor. Recuerde que el cifrado no es barato. La ligera sobrecarga también tiene un impacto en el tiempo de respuesta de su aplicación. Se podría argumentar que el hardware básico es barato y el impacto es insignificante, pero estoy divagando :) No me gusta la idea de ofrecer contenido de marketing en páginas grandes con imágenes, etc. a través de https. Así que aquí va. Es similar a lo que otros han sugerido anteriormente usando middleware, pero es una solución completa que le permite alternar entre HTTP / HTTPS.
Primero cree un middleware.
Este es el aspecto que debería tener su middleware.
Tenga en cuenta que no estoy filtrando en función del entorno porque tengo una configuración HTTPS tanto para el desarrollo local como para la producción, por lo que no es necesario.
Agregue lo siguiente a su routeMiddleware \ App \ Http \ Kernel.php para que pueda elegir qué grupo de rutas debe forzar SSL.
A continuación, me gustaría asegurar el inicio de sesión / registro de dos grupos básicos, etc. y todo lo demás detrás del middleware Auth.
Confirme que sus middlewares se hayan aplicado a sus rutas correctamente desde la consola.
Ahora que ha asegurado todos los formularios o áreas sensibles de su aplicación, la clave ahora es usar su plantilla de vista para definir sus enlaces seguros y públicos (no https).
Según el ejemplo anterior, representaría sus enlaces seguros de la siguiente manera:
Los enlaces no seguros se pueden representar como
Lo que hace es generar una URL completamente calificada como https: // yourhost / login y http: // yourhost / aboutus
Si no representaba una URL completamente calificada con http y usaba una URL de enlace relativa ('/ aboutus'), https persistirá después de que un usuario visite un sitio seguro.
¡Espero que esto ayude!
fuente
¿Qué hay de usar el archivo .htaccess para lograr la redirección https? Esto debe colocarse en la raíz del proyecto (no en la carpeta pública). Su servidor debe estar configurado para apuntar al directorio raíz del proyecto.
Utilizo esto para laravel 5.4 (la última versión al momento de escribir esta respuesta) pero debería seguir funcionando para las versiones de funciones incluso si laravel cambia o elimina alguna funcionalidad.
fuente
RewriteCond %{HTTP_HOST} productiondomain\.com$ [NC]
Puede usar RewriteRule para forzar ssl en .htaccess en la misma carpeta con su index.php
Por favor, agregue como imagen adjunta, agréguela antes que todas las reglas de los demás
fuente
en IndexController.php poner
en AppServiceProvider.php poner
}
En AppServiceProvider.php, cada redireccionamiento irá a la url https y para la solicitud http necesitamos redireccionar una vez, por lo que en IndexController.php Solo tenemos que redirigir una vez
fuente
Las respuestas anteriores no funcionaron para mí, pero parece que Deniz Turan reescribió el .htaccess de una manera que funciona con el balanceador de carga de Heroku aquí: https://www.jcore.com/2017/01/29/force-https -on-heroku-using-htaccess /
fuente
Estoy agregando esta alternativa porque sufrí mucho con este problema. Intenté todas las formas diferentes y nada funcionó. Entonces, se me ocurrió una solución alternativa. Puede que no sea la mejor solución, pero funciona.
producción <: debe reemplazarse con el valor APP_ENV en su archivo .env
fuente
He aquí cómo hacerlo en Heroku
Para forzar SSL en sus dynos pero no localmente, agregue al final de su .htaccess en public /:
Puede probar esto en su máquina local con:
Eso establece el encabezado X-reenviado a la forma que tomará en heroku.
es decir, simula cómo un heroku dyno verá una solicitud.
Obtendrá esta respuesta en su máquina local:
Eso es una redirección. Eso es lo que heroku le devolverá a un cliente si configura el .htaccess como se indicó anteriormente. Pero no sucede en su máquina local porque X-reenviado no se configurará (lo simulamos con curl arriba para ver qué estaba sucediendo).
fuente
Si está utilizando CloudFlare, puede crear una regla de página para usar siempre HTTPS: esto redirigirá cada solicitud http: // a https: //
Además de eso, también tendría que agregar algo como esto a su función \ app \ Providers \ AppServiceProvider.php boot ():
Esto garantizaría que todos los enlaces o rutas de su aplicación utilicen https: // en lugar de http: //.
fuente
Un enfoque un poco diferente, probado en Laravel 5.7
PD. Código actualizado basado en los comentarios de @ matthias-lill.
fuente
config('app.url')
lugar. Además, Laravel viene con una función de cadena muy útilStr::startsWith(config('app.url'), 'https://')
.Para Laravel 5.6, tuve que cambiar un poco la condición para que funcionara.
de:
A:
fuente
Esto funcionó para mí. Hice un código php personalizado para forzar la redirección a https. Solo incluye este código en el header.php
fuente
Estoy usando en Laravel 5.6.28 siguiente middleware:
fuente
La forma más sencilla sería a nivel de aplicación. En el archivo
agregue lo siguiente:
y en el método boot () agregue lo siguiente:
Esto debería redirigir todas las solicitudes a https en el nivel de la aplicación.
(Nota: esto ha sido probado con laravel 5.5 LTS)
fuente
Puede simplemente ir a la aplicación -> Proveedores -> AppServiceProvider.php
agregar dos líneas
use Illuminate \ Support \ Facades \ URL;
URL :: forceScheme ('https');
como se muestra en los siguientes códigos:
fuente
Esto me funciona en Laravel 7.x en 3 sencillos pasos usando un middleware:
1) Genere el middleware con el comando
php artisan make:middleware ForceSSL
Middleware
2) Registre el middleware en el
routeMiddleware
archivo Kernel internoNúcleo
3) Úsalo en tus rutas
Rutas
aquí la documentación completa sobre middlewares
========================
.HTACCESS Método
Si prefiere usar un
.htaccess
archivo, puede usar el siguiente código:¡Saludos!
fuente