Jump to content
Dárcio Gomes

Condições com expressão regular no .htaccess

Recommended Posts

Salve galera...

 

estou a fazer algumas melhorias em nossa plataforma web e algumas decisões estou a tratar direto no .htaccess, me barrei na seguinte situação:

 

no .htaccess tem um redirecionamento que quando o usuário acessa o site sem digitar o www o htacces se encarrega de acrescentar o www e redireciona para o dominio solicitado já com o www, até ai tudo certo, porém preciso definir um protocolo na url destino direto no htaccess para que funcione corretamente EX:http,https

 

gostaria que quando o site estivesse sendo acessado o proprio htaccess identificasse se o usuário está no https ou http e então direcionar para o protocolo que estiver na url para que não seja nescessário fazer isso através do PHP pois isso irá gerar mais um direcionamento, que se tratando de SEO não seria muito recomendado.

 

sei que há como verificar se o usuário está no https ou não, o problema é como criar uma expressão regular para se aplicar a essa regra?

 

por exemplo:

no PHP usaria assim:

if($_SERVER['HTTPS'] == 'on'){
     echo "https://www.dominio.com.br";
}else{
     echo "http://www.dominio.com.br";
}
a mesma constante pode ser utilizada no htaccess da seguinte forma %{HTTPS}.

esse é meu htaccess atual:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www [NC]
RewriteCond %{HTTP_HOST} \.(br|com|net|org|adv|ind|art|eng|inf|tur|srv|tv)$ [NC]
RewriteRule ^(.*) [url=]http://www.%[/url]{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule !\.(txt|css|js|gif|jpeg|jpg|png|ico|JPG|JPEG|PNG|GIF|eot|ttf|woff|woff2|php|html|ogg|mp3|mp4|wma|avi|xml)$ run.php

 

meu problema está na penúltima linha, gostaria que ficasse da seguinte forma:

 

gostaria que ficasse assim:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www [NC]
RewriteCond %{HTTP_HOST} \.(br|com|net|org|adv|ind|art|eng|inf|tur|srv|tv)$ [NC]
RewriteRule ^(.*) (aqui a expressão que defina se está no https ou http)://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule !\.(txt|css|js|gif|jpeg|jpg|png|ico|JPG|JPEG|PNG|GIF|eot|ttf|woff|woff2|php|html|ogg|mp3|mp4|wma|avi|xml)$ run.php

 

Como não sou muito bom em expressão regular não consegui achar uma lógica que funcione como preciso, alguém poderia me dar alguma dica de como criar uma expressão regular que atenda essa necessidade?

 

desde já agradeço a todos que se dispuserem a dar essa força.

 

abraço a todos.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Marcos RJ
      Olá colegas.
       
      Tenho um subdomínio chamado: http://sub1.site.com.br/ e gostaria de redirecioná-lo para http://sub2.site.com.br/ mas sem alterar o endereço na barra de endereços, ou seja, mostrar o conteúdo do sub2, mas mantendo o endereço do sub1. Estou tentando com o código abaixo, mas está dando erro 404:
       
      RewriteEngine on RewriteCond %{HTTP_HOST} ^sub1.site.com.br$ [OR] RewriteCond %{HTTP_HOST} ^www.sub1.site.com.br$ RewriteRule ^(.*)$ http://www.site.com.br/sub2/$1?cliente=nomecliente [P]  
      Na verdade ele funcionava na Locaweb, porém devido aos novos preços do CPanel, mudamos de servidor e temos agora a Plesk. Lembro que no CPanel tínhamos a opção de criar esse redirecionamento para cada subdomínio, mas fui informado pelo servidor atual  que o servidor Plesk não possui o gerador de redirecionamentos como o cPanel possui. Cada cliente terá um subdomínio que será redirecionado para apenas um subdomínio onde estão os arquivos.
       
      Obrigado!
      Marcos
    • By JoãoRicardo.Lima
      Olá pessoal.
      Pessoal como eu faço o roteamento dos meus arquivos no meu projeto, pois sempre que inicio o meu servidor embutido do php em um diretório especifico, ele obviamente não "enxerga" as outras pastas, por exemplo. Eu tenho minha pasta com as views, mas qualquer link que eu coloco em uma view para ser redirecionado para ou view, o servidor não consegue achar o caminho, pois ele não conhece as outras pasta. Como eu faria este roteamento?.
    • By Ygor Guedes
      Boa tarde pessoal!
       
      Criei meu .htaccess no meu servidor, xampp (wampp) para desenvolver umas páginas e bati cabeça em uma situação; não queira que ninguém acessasse minhas páginas com extensão .php e não queria que meu diretório ficasse visível também. Segue abaixo:
       
      RewriteEngine On
       
      #Reescreve URLs
      RewriteCond %{REQUEST_FILENAME} -f
       
      #Era pra remover a extenção .php das páginas
      RewriteRule ^(.*)$ $1.php [L]
      RewriteCond %{REQUEST_FILENAME} !-d
       
      #Não permite a listagem de diretórios
      Options -Indexes
       
      O que está acontecendo:
      1. Se eu acesso minha página principal de login (login.php) sem a extensão até funciona porém ele não retira a extensão sozinha, de forma automática, ou seja, eu tenho que apagar a extensão, senão não funciona.
      2. Se eu criar uma condição: RewriteRule . erro404.php [L] (que serve para direcionar para esta página caso não encontre uma página existente), a condição RewriteRule ^(.*)$ $1.php [L] deixa de funcionar.
       
      Se puderem me ajudar, agradeço.
       
    • By iagomonteiro
      Estou criando um jogo de cartas em web, o jogo é bem estilo HS, e estou tendo problemas para adicionar condições de movimentação no drag and drop. Como vocês podem ver eu tenho uma variável mana, e a movimentação das cartas só seria possível de acordo com ela, porém quando adiciono as condições o D&D acaba nem se movimentando mais, pensei em chamar cada função do d&d dentro de uma condição, mas também não funcionou, alguém pode ajudar?
       
      JS
      // Jogador 1
      const fillplace1 = document.querySelector('#fillplace1');
      const fillplace2 = document.querySelector('#fillplace2');
      const fillplace3 = document.querySelector('#fillplace3');
      var fill;
      const empties = document.querySelectorAll('.empty');
      fillplace1.addEventListener('dragstart', enterstart);
      fillplace2.addEventListener('dragstart', enterstart);
      fillplace3.addEventListener('dragstart', enterstart);
      for (const empty of empties) {
          empty.addEventListener('dragover', dragOver);
          empty.addEventListener('dragenter', dragEnter);
          empty.addEventListener('dragleave', dragLeave);
          empty.addEventListener('drop', dragDrop);
      }
      function enterstart(){
          fill = this;
      }
      function dragOver(e) {
          e.preventDefault();
      }
      function dragEnter(e) {
          e.preventDefault();
          this.className += ' hovered';
      }
      function dragLeave() {
          this.className = 'empty';
      }
      function dragDrop(id) {
          this.className = 'empty';
          this.append(fill);
      }
       
      HTML
      <link rel="stylesheet" href="../css/jogar.css" />
       
      <div id="barraGeneral">
          <img src="../imagens/Campo/barraGeneralalfa.png" id="imggeneral" />
      </div>
       
      <div id="persona">
          <img src="../imagens/Personagem/cucapersonagem.png" id="imgpersonagem" />
      </div>
       
      <button id="btpassar" onclick="cont();">Passar Rodada</button>

      <H1 id="campomana">1</H1>
       
      <!-- Mesa das cartas jogador 1-->
      <div class="empty" id="emptyplace1">
      </div>
      <div class="empty" id="emptyplace2">
      </div>
      <div class="empty" id="emptyplace3">
      </div>
      <div class="empty" id="emptyplace4">
      </div>
      <div class="empty" id="emptyplace5">
      </div>
       
      <!-- Mão do jogador 1 -->
      <div class="emptyhand1">
          <div class="fill" draggable="true" id="fillplace1">
              <img src='../imagens/Sorteio/aa.png' draggable='true'>
          </div>
      </div>
       
      <div class="emptyhand2">
          <div class="fill" draggable="true" id="fillplace2">
              <img src='../imagens/Sorteio/aa2.png' draggable='true'>
          </div>
      </div>
       
      <div class="emptyhand3">
          <div class="fill" draggable="true" id="fillplace3">
              <img src='../imagens/Sorteio/aa2.png' draggable='true'>
          </div>
      </div>
       
    • By Nightmare SEP
      Bom dia,
      Eu tenho configurado em um servidor no meu trabalho, um sistema da intranet (PHP e MySQL), onde já está tudo configurado.
      Esses tempos tivemos um problema no servidor, eu precisei reinstalar o XAMPP e para ficar tudo configurado eu copiei toda a pasta do XAMPP que eu tinha backup e colei por cima. Tudo funcionou corretamente mas agora eu preciso migrar para um novo servidor, e gostaria de fazer algumas alterações.
       
      1 - Como eu configuro um nome (host) para acessar a intranet. Por exemplo, estou acessando de um computador dentro da minha rede, e quero ir no navegador e digitar: http://intranet. Sem ter a necessidade de digitar o IP do servidor.
      2 - Qual arquivo devo editar para criar/alterar o usuário e senha de conexão com o banco de dados?
      3 - Quando eu fiz essa cópia das pastas, o serviço do apache no windows veio como padrão a mesma unidade de disco que estava antes (no caso a unidade E:), mas eu gostaria de mudar também esse caminho. Tem um arquivo que eu consiga editar esse caminho do serviço?
       
      Valeu!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.