Como redirecionar todas as solicitações HTTP para HTTPS
294
Estou tentando redirecionar todas as solicitações HTTP inseguras no meu site (por exemplo http://www.example.com) para HTTPS ( https://www.example.com). Estou usando o PHP btw. Posso fazer isso no .htaccess?
Você pode (e deve) fazer isso através do seu httpd, não do PHP.
drudge
2
@jnpcl, embora eu concorde que a solução httpd é melhor que a solução baseada em PHP, não acho que um redirecionamento sistemático seja uma boa prática em geral. Se você deseja redirecionar seus usuários para HTTPS o tempo todo, envie-os para lá a partir do "ponto de entrada" (o primeiro link para seu site), não faça isso no meio do caminho, o que pode vazar alguns dados que você pensaria está protegido (se você não perceber esse redirecionamento instantâneo).
Bruno
@Bruno: Eu estava pensando mais ao longo das linhas de duplicada http solicitações, o potencial de seqüências de consulta perdidos, ea possibilidade do usuário digitar manualmentehttp://
Drudge
@ jnpcl esse é realmente um bom ponto. Eu estava apenas sugerindo que, embora as pessoas tendam a solicitar esse tipo de redirecionamento para melhorar a segurança do site, muitas vezes ele não o melhora (pois não impede que a mesma solicitação passe primeiro pelo HTTP simples) .
Bruno
8
@outis: o primeiro link que você postou é esta questão.
Mei
Respostas:
305
Atualização: Embora esta resposta tenha sido aceita há alguns anos, observe que sua abordagem agora é recomendada pela documentação do Apache. Use um em Redirectvez disso. Veja esta resposta .
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
@ Cat, como eu estava dizendo na minha resposta / comentários, se você está tentando "redirecionar todo HTTP inseguro [...] para HTTPS", essa abordagem não torna essas solicitações seguras, apenas o navegador as faz. duas vezes, uma vez insegura e uma vez segura.
Bruno
13
O que você realmente deveria fazer é usar o HSTS em conjunto com isso.
Reese Moore
3
Isso pode ser um bug na minha versão do apache (2.4.6, conforme empacotado no Centos 7), mas isso tem problemas para mim em determinadas URLs. Por exemplo, os http://server/foo?email=someone%40example.comredirecionamentos para, https://server/foo?email=someone%2540example.comou seja, o sinal "@" são citados por URL duas vezes . O uso do método na resposta da @ ssc não possui esse problema.
Psmears
2
Resposta errada. Ele redirecionará apenas o URL base, não os URLs nas subpastas. RewriteRule https: //% {HTTP_HOST} {% REQUEST_URI} [R = 301, L] é a resposta correcta (*.)
FredTheWebGuy
7
Eles não necessariamente o recomendam:In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
Essa deve ser a resposta atual. Mas o que exatamente acontece na "configuração SSL"? Um exemplo completo seria realmente útil.
Ben
6
@ Ben: essa é uma questão diferente, amplamente documentada online; aliás, eu adicionei um exemplo quase cheia ontem: serverfault.com/q/597012/26210 que pode lhe dar uma idéia do que se passa na configuração SSL
SSC
46
Essa é uma ótima dica. Mas no documento Apache também menciona: "No caso do redirecionamento http para https, o uso de RewriteRule seria apropriado se você não tiver acesso ao arquivo de configuração principal do servidor e for obrigado a executar esta tarefa em um arquivo .htaccess. " Que é o caso para mim ...
peter_the_oak
4
@ user1844933 Se você usar a permanentpalavra - chave, o efeito será o mesmo (o navegador receberá um redirecionamento 301). Por exemplo:Redirect permanent "/" "https://example.com"
BeetleJuice
2
@Whitecat No Centos 6, o arquivo está localizado em
/etc/httpd/conf/httpd.conf
141
Eu recomendo com o redirecionamento 301:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
obrigado, isso funciona para mim, a resposta aceita não .. provavelmente devido à falta de[L]
billynoah
1
Sim. Esta é a resposta correta, uma vez que também as rotas de todas as URLs em subpastas, também
FredTheWebGuy
Isso está no nível superior do arquivo htaccess?
CodyBugstein #
1
@CodyBugstein É onde eu sempre coloco, e sempre funciona.
Daan van den Bergh
3
Todas as respostas não têm uma coisa - qualquer código para redirecionamento deve ser colocado logo no início do seu arquivo .htaccess, ANTES de qualquer outra coisa, se você quiser que todas as páginas sejam redirecionadas para https.
Vadim Anisimov 30/10
35
Como eu estava dizendo nesta pergunta , sugiro que você evite redirecionar todas as solicitações HTTP para seus equivalentes HTTPS às cegas, pois isso pode causar uma falsa impressão de segurança. Em vez disso, você provavelmente deve redirecionar a "raiz" do seu site HTTP para a raiz do site HTTPS e vincular a partir daí, apenas para HTTPS.
O problema é que, se algum link ou formulário no site HTTPS fizer com que o cliente envie uma solicitação ao site HTTP, seu conteúdo estará visível antes do redirecionamento.
Por exemplo, se uma de suas páginas veiculadas em HTTPS tiver um formulário que diga <form action="http://example.com/doSomething">e envie alguns dados que não devem ser enviados de forma clara, o navegador primeiro enviará a solicitação completa (incluindo a entidade, se for um POST) para o site HTTP primeiro. O redirecionamento será enviado imediatamente ao navegador e, como um grande número de usuários desabilita ou ignora os avisos, é provável que seja ignorado.
Obviamente, o erro de fornecer os links que deveriam ser para o site HTTPS, mas que acabam sendo para o site HTTP, pode causar problemas assim que você ouvir algo na porta HTTP no mesmo endereço IP do seu site HTTPS. No entanto, acho que manter os dois sites como um "espelho" só aumenta as chances de cometer erros, pois você pode supor que ele se auto-corrigirá redirecionando o usuário para HTTPS, embora muitas vezes seja tarde demais. (Houve discussões semelhantes nesta pergunta. )
Ao tomar a decisão de veicular um site inteiro como HTTPS, esse tipo de redirecionamento faz sentido. Não quero que um usuário obtenha um 403 porque especificou http para sua página de destino. Concordo que alguém especifique http em um link e implante-o na produção que é ruim. DEVE ser capturado durante o teste, mesmo com o redirecionamento no lugar. Eu não gosto do argumento "could" porque isso "poderia" acontecer sem o redirecionamento. Os sintomas são os mesmos quando o teste em um navegador seguro, a não ser depois de confirmar para enviar em claro ele redireciona em vez de receber um 403.
Derek Litz
Sim, vejo o benefício de falhar bastante se alguém colocar o HTTP por engano em uma ação de formulário, mas ser tolerante com URLs digitados parece mais importante na maioria dos casos.
Daniel Lubarov
4
@ Daniel, eu concordo que é útil ser indulgente quando os usuários digitam o URL. Eu diria que é um dos casos em que é melhor desativar esse recurso durante o desenvolvimento / teste, mas ativá-lo na produção (ou nos últimos estágios do desenvolvimento / teste).
Bruno
por que não fazer o http para https no dns.
Muhammad Umer
1
@ MuhammadUmer, porque isso não tem nada a ver com o DNS. Eles usariam o mesmo nome de host em geral, mas mesmo com um nome de host diferente, você ainda precisaria alterar o protocolo e a porta.
Bruno
18
Descobri que a melhor maneira de https e www no domínio é
Isso não será redirecionado http://www.example.com/...porque as duas condições estão implicitamente AND. Eles deveriam ser OR'd, ou seja. inclua a ORflag na primeira condição (e lembre-se de escapar dos pontos literais na regex). Mas se você estiver implementando HSTS então você não quer redirecionar para HTTPS e www em um único redirecionamento, você deve redirecionar para HTTPS primeiro .
Esse é o método adequado para redirecionar HTTP para HTTPS usando .htaccess, de acordo com o GoDaddy.com. A primeira linha de código é auto-explicativa. A segunda linha de código verifica se o HTTPS está desativado e, se estiver, redireciona o HTTP para o HTTPS executando a terceira linha de código, caso contrário, a terceira linha de código é ignorada.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Mas você também perguntou se pode fazê-lo em um .htaccessarquivo. Nesse caso, você pode usar o RewriteEngine do Apache :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
Se tudo estiver funcionando bem e você desejar que os navegadores se lembrem desse redirecionamento, você pode declarar como permanente alterando a última linha para:
Parece que a documentação do Apache recomenda contra a rota Rewrite. E o Redirect? O que mais pode ir em um .htaccessarquivo?
precisa saber é o seguinte
Sim, o redirecionamento é preferido e pode ser usado no .htaccess. Mas você não pode adicionar a condição para redirecionar apenas o tráfego http para https. Ele também redireciona https -> loop de redirecionamento infinito. Eu o listei na diretiva VirtualHost usada para http (porta 80) acima. O htaccess não suporta essa diretiva e, portanto, o redirecionamento não pode ser usado aqui.
Faça tudo o que é explicado acima para redirecionar. Basta adicionar "HTTP Strict Transport Security" ao seu cabeçalho. Isso evitará o homem no ataque do meio.
Edite seu arquivo de configuração do apache (/etc/apache2/sites-enabled/website.conf e /etc/apache2/httpd.conf, por exemplo) e adicione o seguinte ao seu VirtualHost:
# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
<VirtualHost 67.89.123.45:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>
Para redirecionar todas as httpsolicitações para https, você pode usar:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
Se mod-rewrite não estiver ativado e você estiver no apache 2.4, também poderá usar uma diretiva Redirectinterna ifpara redirecionar httpsolicitações https.
Se você estiver em uma situação em que não pode acessar a configuração do apache diretamente para o seu site, que muitas plataformas hospedadas ainda estão restritas dessa maneira, eu recomendaria uma abordagem em duas etapas. A razão pela qual o próprio Apache documenta que você deve usar suas opções de configuração antes de mais nada sobre o mod_rewrite para HTTP para HTTPS.
Primeiro, como mencionado acima, você configuraria suas regras .htaccess mod_rewrite:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Então, no (s) seu (s) arquivo (s) PHP (você precisa fazer isso sempre que for apropriado para a sua situação, alguns sites canalizarão todas as solicitações através de um único arquivo PHP, outros servirão várias páginas, dependendo de suas necessidades e da solicitação feita ):
<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>
O item acima precisa executar ANTES de qualquer código que possa expor potencialmente os dados seguros em um ambiente não seguro. Assim, seu site usa o redirecionamento automático via HTACCESS e mod_rewrite, enquanto seus scripts garantem que nenhuma saída seja fornecida quando não for acessada por HTTPS.
Acho que a maioria das pessoas não pensa assim e, portanto, o Apache recomenda que você não use esse método sempre que possível. No entanto, basta uma verificação extra no final do desenvolvimento para garantir que os dados do usuário estejam seguros. Esperamos que isso ajude alguém que possa ter que usar métodos não recomendados devido a restrições nos nossos serviços de hospedagem.
Se você quiser fazer isso no servidor tomcat, siga as etapas abaixo
Em um servidor HTTP independente do Apache Tomcat (8.5.x), como configurá-lo para que, se um usuário digitar www.domain.com, ele seja encaminhado automaticamente para o site https (www.domain.com).
O método de duas etapas para incluir o seguinte em seu [Tomcat_base] /conf/web.xml antes da tag de fechamento
Uma vantagem diferente para esse problema é quando um Load Balancer entra em jogo.
A situação é a seguinte: - O tráfego do navegador para o Load Balancer, e vice-versa, é (deveria ser) HTTPS - O tráfego entre o Load Balancer e o WebServer real é HTTP.
Portanto, todas as variáveis de solicitação do servidor no PHP ou Apache mostram que a conexão é apenas HTTP. E os diretórios HTTP e HTTPS no servidor são os mesmos.
O RewriteCondition na resposta aprovada não funciona. Dá um loop ou simplesmente não funciona.
A pergunta é: como fazer isso funcionar em um balanceador de carga.
(Ou o Load Balancer está configurado incorretamente. Qual é o que eu estou esperando, porque então eu posso passar o problema para a empresa WebHosting :-))
O redirecionamento teria que acontecer no balanceador de carga. Dependendo do tipo de balanceador de carga, isso deve ser possível na configuração, ou é uma instância do apache, onde a resposta aceita funcionaria. Apenas não faça isso nos nós únicos.
e, por exemplo, http: // server / foo? email = alguem% 40example.com redireciona normalmente sem problemas. O arquivo .htaccess localizado na pasta raiz do site (por exemplo, public_html). É possível usar
RewriteCond% {SERVER_PORT}! ^ 443 $ em vez disso RewriteCond% {HTTPS}! On
httpd
, não do PHP.http://
Respostas:
Atualização: Embora esta resposta tenha sido aceita há alguns anos, observe que sua abordagem agora é recomendada pela documentação do Apache. Use um em
Redirect
vez disso. Veja esta resposta .fonte
http://server/foo?email=someone%40example.com
redirecionamentos para,https://server/foo?email=someone%2540example.com
ou seja, o sinal "@" são citados por URL duas vezes . O uso do método na resposta da @ ssc não possui esse problema.In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
Os documentos do Apache recomendam não usar uma reescrita:
Este trecho deve ir em arquivo de configuração do servidor principal, não em
.htaccess
como solicitado na pergunta.Este artigo pode ter surgido somente depois que a pergunta foi feita e respondida, mas parece ser o caminho atual.
fonte
permanent
palavra - chave, o efeito será o mesmo (o navegador receberá um redirecionamento 301). Por exemplo:Redirect permanent "/" "https://example.com"
Eu recomendo com o redirecionamento 301:
fonte
[L]
Como eu estava dizendo nesta pergunta , sugiro que você evite redirecionar todas as solicitações HTTP para seus equivalentes HTTPS às cegas, pois isso pode causar uma falsa impressão de segurança. Em vez disso, você provavelmente deve redirecionar a "raiz" do seu site HTTP para a raiz do site HTTPS e vincular a partir daí, apenas para HTTPS.
O problema é que, se algum link ou formulário no site HTTPS fizer com que o cliente envie uma solicitação ao site HTTP, seu conteúdo estará visível antes do redirecionamento.
Por exemplo, se uma de suas páginas veiculadas em HTTPS tiver um formulário que diga
<form action="http://example.com/doSomething">
e envie alguns dados que não devem ser enviados de forma clara, o navegador primeiro enviará a solicitação completa (incluindo a entidade, se for um POST) para o site HTTP primeiro. O redirecionamento será enviado imediatamente ao navegador e, como um grande número de usuários desabilita ou ignora os avisos, é provável que seja ignorado.Obviamente, o erro de fornecer os links que deveriam ser para o site HTTPS, mas que acabam sendo para o site HTTP, pode causar problemas assim que você ouvir algo na porta HTTP no mesmo endereço IP do seu site HTTPS. No entanto, acho que manter os dois sites como um "espelho" só aumenta as chances de cometer erros, pois você pode supor que ele se auto-corrigirá redirecionando o usuário para HTTPS, embora muitas vezes seja tarde demais. (Houve discussões semelhantes nesta pergunta. )
fonte
Descobri que a melhor maneira de https e www no domínio é
fonte
http://www.example.com/...
porque as duas condições estão implicitamente AND. Eles deveriam ser OR'd, ou seja. inclua aOR
flag na primeira condição (e lembre-se de escapar dos pontos literais na regex). Mas se você estiver implementando HSTS então você não quer redirecionar para HTTPS e www em um único redirecionamento, você deve redirecionar para HTTPS primeiro .Essa é a abordagem de redirecionamento de html, funciona, mas não é a melhor.
Abordagem PHP
.htaccess approch
copiado de: www.letuslook.org
fonte
.htaccess
vai? Além disso, esse link está morto.Eu gosto deste método de redirecionamento de http para https. Porque não preciso editá-lo para cada site.
fonte
O uso do código a seguir no arquivo .htaccess redireciona automaticamente os visitantes para a versão HTTPS do seu site:
Se você possui um arquivo .htaccess:
Não duplique RewriteEngine On.
Verifique se as linhas que começam RewriteCond e RewriteRule seguem imediatamente o RewriteEngine já existente ativado.
fonte
Esse é o método adequado para redirecionar HTTP para HTTPS usando .htaccess, de acordo com o GoDaddy.com. A primeira linha de código é auto-explicativa. A segunda linha de código verifica se o HTTPS está desativado e, se estiver, redireciona o HTTP para o HTTPS executando a terceira linha de código, caso contrário, a terceira linha de código é ignorada.
https://www.godaddy.com/help/redirect-http-to-https-automatically-8828
fonte
A melhor solução depende dos seus requisitos. Este é um resumo das respostas postadas anteriormente, com algum contexto adicionado.
Se você trabalha com o servidor da web Apache e pode alterar sua configuração, siga a documentação do Apache :
Mas você também perguntou se pode fazê-lo em um
.htaccess
arquivo. Nesse caso, você pode usar o RewriteEngine do Apache :Se tudo estiver funcionando bem e você desejar que os navegadores se lembrem desse redirecionamento, você pode declarar como permanente alterando a última linha para:
Mas tome cuidado se você mudar de idéia nesse redirecionamento. Os navegadores lembram-no por muito tempo e não verificam se foi alterado.
Você pode não precisar da primeira linha,
RewriteEngine On
dependendo da configuração do servidor da web.Se você procurar uma solução PHP, observe a matriz $ _SERVER e a função do cabeçalho :
fonte
.htaccess
arquivo?Adicione o seguinte código ao arquivo .htaccess:
Onde [seu nome de domínio] é o nome de domínio do seu site.
Você também pode redirecionar pastas específicas para fora do seu nome de domínio, substituindo a última linha do código acima por:
fonte
Faça tudo o que é explicado acima para redirecionar. Basta adicionar "HTTP Strict Transport Security" ao seu cabeçalho. Isso evitará o homem no ataque do meio.
https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
fonte
Para redirecionar todas as
http
solicitações parahttps
, você pode usar:Se mod-rewrite não estiver ativado e você estiver no apache 2.4, também poderá usar uma diretiva
Redirect
internaif
para redirecionarhttp
solicitaçõeshttps
.Apache 2.4.
fonte
Se você estiver em uma situação em que não pode acessar a configuração do apache diretamente para o seu site, que muitas plataformas hospedadas ainda estão restritas dessa maneira, eu recomendaria uma abordagem em duas etapas. A razão pela qual o próprio Apache documenta que você deve usar suas opções de configuração antes de mais nada sobre o mod_rewrite para HTTP para HTTPS.
Primeiro, como mencionado acima, você configuraria suas regras .htaccess mod_rewrite:
Então, no (s) seu (s) arquivo (s) PHP (você precisa fazer isso sempre que for apropriado para a sua situação, alguns sites canalizarão todas as solicitações através de um único arquivo PHP, outros servirão várias páginas, dependendo de suas necessidades e da solicitação feita ):
O item acima precisa executar ANTES de qualquer código que possa expor potencialmente os dados seguros em um ambiente não seguro. Assim, seu site usa o redirecionamento automático via HTACCESS e mod_rewrite, enquanto seus scripts garantem que nenhuma saída seja fornecida quando não for acessada por HTTPS.
Acho que a maioria das pessoas não pensa assim e, portanto, o Apache recomenda que você não use esse método sempre que possível. No entanto, basta uma verificação extra no final do desenvolvimento para garantir que os dados do usuário estejam seguros. Esperamos que isso ajude alguém que possa ter que usar métodos não recomendados devido a restrições nos nossos serviços de hospedagem.
fonte
Através do .htaccess Isso ajudará.
Além disso, consulte isso para obter mais detalhes. Como redirecionar Http para Https?
fonte
A menos que você precise de mod_rewrite para outras coisas, o uso da diretiva IF principal do Apache é mais limpa e rápida:
Você pode adicionar mais condições à diretiva IF, como garantir um único domínio canônico sem o prefixo www:
Há muita inércia de familiaridade no uso de mod_rewrite para tudo, mas veja se isso funciona para você.
Mais informações: https://httpd.apache.org/docs/2.4/mod/core.html#if
Para vê-lo em ação (tente sem www. Ou https: // ou com .net em vez de .com): https://nohodental.com/ (um site em que estou trabalhando).
fonte
leve esse código para o seu arquivo .htaccess Redirecione HTTP para HTTPS automaticamente
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
fonte
Encontrei um método para forçar o redirecionamento de todas as páginas do site de http para analógico de páginas em https que funcionam para mim.
fonte
(funcionou para mim quando nenhuma das respostas acima funcionou)
Bônus:
(https fixo: // www .example.com não encontrado)
fonte
Isso redireciona todos os URLs para https e www
fonte
Se você quiser fazer isso no servidor tomcat, siga as etapas abaixo
Em um servidor HTTP independente do Apache Tomcat (8.5.x), como configurá-lo para que, se um usuário digitar www.domain.com, ele seja encaminhado automaticamente para o site https (www.domain.com).
O método de duas etapas para incluir o seguinte em seu [Tomcat_base] /conf/web.xml antes da tag de fechamento
e definindo as configurações do conector [Tomcat_base] /conf/server.xml:
Nota: Se você já fez a configuração https e está tentando redirecionar, execute apenas a etapa 1.
fonte
Se você estiver usando o Apache, o mod_rewrite é a solução mais fácil e possui muita documentação online sobre como fazer isso. Por exemplo: http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html
fonte
Uma vantagem diferente para esse problema é quando um Load Balancer entra em jogo.
A situação é a seguinte: - O tráfego do navegador para o Load Balancer, e vice-versa, é (deveria ser) HTTPS - O tráfego entre o Load Balancer e o WebServer real é HTTP.
Portanto, todas as variáveis de solicitação do servidor no PHP ou Apache mostram que a conexão é apenas HTTP. E os diretórios HTTP e HTTPS no servidor são os mesmos.
O RewriteCondition na resposta aprovada não funciona. Dá um loop ou simplesmente não funciona.
A pergunta é: como fazer isso funcionar em um balanceador de carga.
(Ou o Load Balancer está configurado incorretamente. Qual é o que eu estou esperando, porque então eu posso passar o problema para a empresa WebHosting :-))
fonte
Se você estiver usando um Elastic Load Balancer da Amazon Web Services que aceite tráfego https e o direcione para seu servidor com http, a maneira correta de redirecionar todo o tráfego http para https é descrita aqui: https://aws.amazon. com / premiumsupport / centro de conhecimento / redirecionar-http-https-elb
Use o cabeçalho X-Forwarded-Proto (contém http ou https), sempre incluído nas solicitações http do balanceador de carga, conforme descrito aqui: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x- forwarded-headers.html
No arquivo httpd.conf:
Ou no seu arquivo .htaccess raiz:
Bônus: ele não tentará redirecionar o tráfego http na sua máquina de desenvolvimento local.
fonte
Funciona para mim:
e, por exemplo, http: // server / foo? email = alguem% 40example.com redireciona normalmente sem problemas. O arquivo .htaccess localizado na pasta raiz do site (por exemplo, public_html). É possível usar RewriteCond% {SERVER_PORT}! ^ 443 $ em vez disso RewriteCond% {HTTPS}! On
fonte