Trabalhando no meu primeiro projeto do Laravel 5 e não sei onde ou como colocar a lógica para forçar o HTTPS no meu aplicativo. O argumento decisivo aqui é que existem muitos domínios apontando para o aplicativo e apenas dois em cada três usam SSL (o terceiro é um domínio de fallback, longa história). Então, eu gostaria de lidar com isso na lógica do meu aplicativo, em vez de .htaccess.
No Laravel 4.2, realizei o redirecionamento com este código, localizado em filters.php
:
App::before(function($request)
{
if( ! Request::secure())
{
return Redirect::secure(Request::path());
}
});
Eu estou pensando que o Middleware é onde algo assim deve ser implementado, mas não consigo entender isso usando-o.
Obrigado!
ATUALIZAR
Se você estiver usando o Cloudflare como eu, isso será feito adicionando uma nova regra de página no seu painel de controle.
php
laravel
laravel-routing
laravel-5
NightMICU
fonte
fonte
$_SERVER['HTTP_HOST']
Respostas:
Você pode fazê-lo funcionar com uma classe Middleware. Deixe-me dar uma ideia.
Em seguida, aplique esse middleware a todas as solicitações adicionando a configuração da regra no
Kernel.php
arquivo, da seguinte maneira:Na amostra acima, o middleware redirecionará todas as solicitações para https se:
production
. Portanto, basta ajustar as configurações de acordo com suas preferências.Cloudflare
Estou usando esse código no ambiente de produção com um SSL WildCard e o código funciona corretamente. Se eu removê
&& App::environment() === 'production'
-lo e testá-lo no localhost, o redirecionamento também funcionará. Portanto, ter ou não um SSL instalado não é o problema. Parece que você precisa prestar muita atenção à sua camada do Cloudflare para ser redirecionado ao protocolo Https.Editar 23/03/2015
Graças à
@Adam Link
sugestão de: provavelmente é causado pelos cabeçalhos que o Cloudflare está passando. O CloudFlare provavelmente atinge seu servidor via HTTP e passa um cabeçalho X-Forwarded-Proto que declara que está encaminhando uma solicitação HTTPS. Você precisa adicionar outra linha no seu Middleware que diga ...... confiar nos cabeçalhos que o CloudFlare está enviando. Isso interromperá o loop de redirecionamento
Editar 27/09/2016 - Laravel v5.3
Só precisa adicionar a classe middleware ao
web
grupo emkernel.php file
:Editar 23/08/2018 - Laravel v5.7
App::environment() === 'production'
. Para a versão anterior eraenv('APP_ENV') === 'production'
.\URL::forceScheme('https');
realmente não redireciona. Ele apenas cria linkshttps://
quando o site é renderizado.fonte
$request->setTrustedProxies( [ $request->getClientIp() ] );
confiar nos cabeçalhos que o CloudFlare está enviando. Isso interromperá o loop de redirecionamento.return redirect()->secure($request->getRequestUri(), 301);
$request->server('HTTP_X_FORWARDED_PROTO') != 'https'
isso funciona para mimOutra opção que funcionou para mim, no AppServiceProvider, coloque esse código no método de inicialização:
A função escrita antes de forceSchema ('https') estava errada, seu forceScheme
fonte
\URL::forceScheme('https');
if($this->app->environment() === 'production'){ $this->app['request']->server->set('HTTPS', true); }
\URL::forceScheme('https')
Como alternativa, se você estiver usando o Apache, poderá usar o
.htaccess
arquivo para impor seus URLs aohttps
prefixo. No Laravel 5.4, adicionei as seguintes linhas ao meu.htaccess
arquivo e funcionou para mim.fonte
RewriteCond %{HTTP_HOST} !=localhost
no dev para contornar isso.para o laravel 5.4, use este formato para obter redirecionamento https em vez de .htaccess
fonte
Semelhante à resposta de manix, mas em um só lugar. Middleware para forçar HTTPS
fonte
Isto é para o Larave 5.2.xe superior. Se você deseja ter uma opção para veicular algum conteúdo por HTTPS e outros por HTTP, aqui está uma solução que funcionou para mim. Você pode se perguntar: por que alguém iria querer exibir apenas algum conteúdo por HTTPS? Por que não servir tudo sobre HTTPS?
Embora seja muito bom servir o site inteiro por HTTPS, cortar tudo em HTTPS tem uma sobrecarga adicional no servidor. Lembre-se de que a criptografia não é barata. A pequena sobrecarga também afeta o tempo de resposta do seu aplicativo. Você poderia argumentar que o hardware básico é barato e o impacto é insignificante, mas eu discordo :) Eu não gosto da idéia de veicular páginas de conteúdo de marketing com páginas etc, com imagens etc. em https. Então aqui vai. É semelhante ao que outros sugeriram acima usando middleware, mas é uma solução completa que permite alternar entre HTTP / HTTPS.
Primeiro, crie um middleware.
É assim que seu middleware deve se parecer.
Observe que eu não estou filtrando com base no ambiente, porque eu tenho a configuração HTTPS para desenvolvimento e produção local, portanto não há necessidade.
Adicione o seguinte ao seu routeMiddleware \ App \ Http \ Kernel.php para poder escolher qual grupo de rotas deve forçar o SSL.
Em seguida, eu gostaria de proteger dois grupos básicos de login / inscrição, etc, e tudo mais por trás do middleware Auth.
Confirme se seus middlewares foram aplicados corretamente às suas rotas no console.
Agora que você protegeu todos os formulários ou áreas sensíveis do seu aplicativo, a chave agora é usar seu modelo de exibição para definir seus links públicos e seguros (não https).
Com base no exemplo acima, você renderizou seus links seguros da seguinte maneira:
Links não seguros podem ser renderizados como
O que isso faz é renderizar uma URL totalmente qualificada, como https: // yourhost / login e http: // yourhost / aboutus
Se você não processasse o URL totalmente qualificado com http e usasse um URL de link relativo ('/ aboutus'), o https persistiria depois que um usuário visitar um site seguro.
Espero que isto ajude!
fonte
Que tal usar apenas o arquivo .htaccess para obter o redirecionamento https? Isso deve ser colocado na raiz do projeto (não na pasta pública). Seu servidor precisa ser configurado para apontar para o diretório raiz do projeto.
Eu uso isso para o laravel 5.4 (versão mais recente até a escrita desta resposta), mas ele deve continuar funcionando para versões de recursos, mesmo que o laravel mude ou remova alguma funcionalidade.
fonte
RewriteCond %{HTTP_HOST} productiondomain\.com$ [NC]
Você pode usar RewriteRule para forçar o ssl na mesma pasta .htaccess com o seu index.php
Adicione como anexo de imagem, adicione-o antes de todas as outras regras
fonte
em IndexController.php colocar
em AppServiceProvider.php colocar
}
No AppServiceProvider.php, todo redirecionamento será direcionado para o URL https e, para a solicitação http, precisamos redirecionar uma vez, assim, no IndexController.php.
fonte
As respostas acima não funcionaram para mim, mas parece que Deniz Turan reescreveu o .htaccess de uma maneira que funciona com o balanceador de carga do Heroku aqui: https://www.jcore.com/2017/01/29/force-https -on-heroku-using-htaccess /
fonte
Estou adicionando essa alternativa, pois sofri muito com esse problema. Eu tentei de todas as maneiras diferentes e nada funcionou. Então, eu vim com uma solução alternativa para isso. Pode não ser a melhor solução, mas funciona -
produção <- deve ser substituído pelo valor APP_ENV no seu arquivo .env
fonte
Veja como fazer isso no Heroku
Para forçar o SSL em seus dynos, mas não localmente, adicione ao final do seu .htaccess em público /:
Você pode testar isso em sua máquina local com:
Isso define o cabeçalho X encaminhado para o formato que ele assumirá no heroku.
isto simula como um heroku dyno verá uma solicitação.
Você receberá esta resposta em sua máquina local:
Isso é um redirecionamento. É isso que o heroku vai devolver a um cliente se você definir o .htaccess como acima. Mas isso não acontece na sua máquina local porque o encaminhamento X não será definido (falsificamos com curvatura acima para ver o que estava acontecendo).
fonte
Se você estiver usando o CloudFlare, poderá criar uma regra de página para sempre usar HTTPS: isso redirecionará toda solicitação http: // para https: //
Além disso, você também teria que adicionar algo assim à sua função boot () \ app \ Providers \ AppServiceProvider.php:
Isso garantiria que todos os links / caminhos no seu aplicativo usassem https: // em vez de http: //.
fonte
Uma abordagem um pouco diferente, testada no Laravel 5.7
PS. Código atualizado com base nos comentários de @ matthias-lill.
fonte
config('app.url')
contrário. Além disso, o Laravel vem com uma função de string muito útilStr::startsWith(config('app.url'), 'https://')
.Para o Laravel 5.6, tive que mudar um pouco a condição para fazê-lo funcionar.
de:
Para:
fonte
Isso funcionou para mim. Eu criei um código php personalizado para forçar o redirecionamento para https. Basta incluir este código no header.php
fonte
Estou usando no Laravel 5.6.28 próximo middleware:
fonte
A maneira mais fácil seria no nível do aplicativo. No arquivo
adicione o seguinte:
e no método boot () adicione o seguinte:
Isso deve redirecionar todas as solicitações para https no nível do aplicativo.
(Nota: isto foi testado com laravel 5.5 LTS)
fonte
Você pode simplesmente acessar o aplicativo -> Provedores -> AppServiceProvider.php
adicione duas linhas
use Illuminate \ Support \ Facades \ URL;
URL :: forceScheme ('https');
como mostra os seguintes códigos:
fonte
Este trabalho para mim no Laravel 7.x em 3 etapas simples usando um middleware:
1) Gere o middleware com o comando
php artisan make:middleware ForceSSL
Middleware
2) Registre o middleware
routeMiddleware
dentro do arquivo KernelNúcleo
3) Use-o em suas rotas
Rotas
aqui a documentação completa sobre middlewares
========================
Método .HTACCESS
Se você preferir usar um
.htaccess
arquivo, poderá usar o seguinte código:Saudações!
fonte