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 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!
    • By wekend
      Sempre que tento iniciar o httpd no CentOS 7 no meu Google VPS, a seguinte mensagem sempre aparece. pode me ajudar?
      ● httpd.service - The Apache HTTP Server
      Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
      Active: failed (Result: exit-code) since Sun 2019-09-08 13:12:27 UTC; 1min 21s ago
      Docs: man:httpd(8)
      man:apachectl(8)
      Process: 2019 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
      Process: 2018 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
      Main PID: 2018 (code=exited, status=1/FAILURE)
      Sep 08 13:12:27 centos-web systemd[1]: Starting The Apache HTTP Server…
      Sep 08 13:12:27 centos-web httpd[2018]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:443
      Sep 08 13:12:27 centos-web systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
      Sep 08 13:12:27 centos-web kill[2019]: kill: cannot find process ""
      Sep 08 13:12:27 centos-web systemd[1]: httpd.service: control process exited, code=exited status=1
      Sep 08 13:12:27 centos-web systemd[1]: Failed to start The Apache HTTP Server.
      Sep 08 13:12:27 centos-web systemd[1]: Unit httpd.service entered failed state.
      Sep 08 13:12:27 centos-web systemd[1]: httpd.service failed.
    • By Carcleo
      Fiz o download do Apache Haus 64 bits nesse link: https://www.apachehaus.com/cgi-bin/download.plx#APACHE24VC15
       
      No httpd.conf alterei o diretório do htdocs para o disco C:
      Habilitei a diretiva LoadModule vhost_alias_module modules/mod_vhost_alias.so para usar Virtuais Hosts
      Habilitei a diretiva Include conf/extra/httpd-vhosts.conf também para usar Virtuais Hosts
      No extras/httpd-ahssl.conf, configurei os VirtuaisHosts no final do arquivo da seguinte forma:
      <VirtualHost _default_:443>   SSLEngine on   ServerName localhost:443   SSLCertificateFile "D:/Trabalhos/host/htdocs/fielcard.net.br/ssl/server.crt"   SSLCertificateKeyFile "D:/Trabalhos/host/htdocs/fielcard.net.br/ssl/server.key"   DocumentRoot "D:/Trabalhos/host/htdocs/fielcard.net.br" # DocumentRoot "${SRVROOT}/htdocs" # DocumentRoot access handled globally in httpd.conf     CustomLog "${SRVROOT}/logs/ssl_request.log" \           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"     <Directory "${SRVROOT}/htdocs">         Options Indexes Includes FollowSymLinks         AllowOverride AuthConfig Limit FileInfo     Require all granted     </Directory> </virtualhost> <VirtualHost *:443>   SSLEngine on   ServerName serverone.tld:443   SSLCertificateFile "D:/Trabalhos/host/htdocs/fielcard.net.br/ssl/serverone.crt"   SSLCertificateKeyFile "D:/Trabalhos/host/htdocs/fielcard.net.br/ssl/serverone.key"   DocumentRoot "D:/Trabalhos/host/htdocs/fielcard.net.br"     CustomLog "${SRVROOT}/logs/ssl_request.log" \           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"     <Directory "${SRVROOT}/htdocs">         Options Indexes Includes FollowSymLinks         AllowOverride AuthConfig Limit FileInfo     Require all granted     </Directory> </virtualhost> <VirtualHost *:443>   SSLEngine on   ServerName servertwo.tld:443   SSLCertificateFile "D:/Trabalhos/host/htdocs/fielcard.net.br/ssl/servertwo.crt"   SSLCertificateKeyFile "D:/Trabalhos/host/htdocs/fielcard.net.br/ssl/servertwo.key"   DocumentRoot "D:/Trabalhos/host/htdocs/fielcard.net.br"     CustomLog "${SRVROOT}/logs/ssl_request.log" \           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"     <Directory "${SRVROOT}/htdocs">         Options Indexes Includes FollowSymLinks         AllowOverride AuthConfig Limit FileInfo     Require all granted     </Directory> </virtualhost>  <VirtualHost _default_:443>   SSLEngine on   ServerName localhost:443   SSLCertificateFile "D:/Trabalhos/host/htdocs/mvc_crud_pdo/ssl/server.crt"   SSLCertificateKeyFile "D:/Trabalhos/host/htdocs/mvc_crud_pdo/ssl/server.key"   DocumentRoot "D:/Trabalhos/host/htdocs/mvc_crud_pdo"     CustomLog "${SRVROOT}/logs/ssl_request.log" \           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"     <Directory "${SRVROOT}/htdocs">         Options Indexes Includes FollowSymLinks         AllowOverride AuthConfig Limit FileInfo     Require all granted     </Directory> </virtualhost> <VirtualHost *:443>   SSLEngine on   ServerName serverone.tld:443   SSLCertificateFile "D:/Trabalhos/host/htdocs/mvc_crud_pdo/ssl/serverone.crt"   SSLCertificateKeyFile "D:/Trabalhos/host/htdocs/mvc_crud_pdo/ssl/serverone.key"   DocumentRoot "D:/Trabalhos/host/htdocs/mvc_crud_pdo"     CustomLog "${SRVROOT}/logs/ssl_request.log" \           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"     <Directory "${SRVROOT}/htdocs">         Options Indexes Includes FollowSymLinks         AllowOverride AuthConfig Limit FileInfo     Require all granted     </Directory> </virtualhost> <VirtualHost *:444>   SSLEngine on   ServerName servertwo.tld:443   SSLCertificateFile "D:/Trabalhos/host/htdocs/mvc_crud_pdo/ssl/servertwo.crt"   SSLCertificateKeyFile "D:/Trabalhos/host/htdocs/mvc_crud_pdo/ssl/servertwo.key"   DocumentRoot "D:/Trabalhos/host/htdocs/mvc_crud_pdo"     CustomLog "${SRVROOT}/logs/ssl_request.log" \           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"     <Directory "${SRVROOT}/htdocs">         Options Indexes Includes FollowSymLinks         AllowOverride AuthConfig Limit FileInfo     Require all granted     </Directory> </virtualhost>   
      Os Problemas:
      A ) http://localhost/site parou de funcionar, ou seja, quando o link começa com localhost
      B ) Apenas o primeiro site cadastrado (fielcard.net.br) no http-ahssl.conf está abrindo, o outro (mvc_crud_pdo) está abrindo o fielcard.net.br
       
      Onde estou errando?
       
      O objetivo é configurar Hosts Virtuais
       
    • By Carcleo
      A ideia:
       
      toda e entrada no site, seja com link direto do tipo:
       
      www.site.com.br/pasta1/pasta2/arquivo.php  
      ou normal url amigável
       
      www.site.com.br/categoria/tipo  
      tudo queria que redirecionasse para o index.php da raiz do site.
       
      E que, caso o arquivo ou pasta NÃO existisse, abrisse normalmente a pagina 404.php
       
       
      Tentei de tres formas mas nenhuma dá certo.
       
      Primeira forma
      RewriteEngine On ErrorDocument 400 http://www.sortecard.com.br/index.php ErrorDocument 401 http://www.sortecard.com.br/401.php ErrorDocument 403 http://www.sortecard.com.br/403.php ErrorDocument 404 http://www.sortecard.com.br/404.php ErrorDocument 500 http://www.sortecard.com.br/500.php php_value allow_url_fopen on php_value allow_url_include on php_flag mail_filter 0 RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php?page=$1 Segunda forma:
      Options +FollowSymLinks DirectorySlash On RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} \.php$ RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?request=$1 [L] Terceira forma:
      RewriteEngine On ErrorDocument 400 http://www.sortecard.com.br/index.php ErrorDocument 401 http://www.sortecard.com.br/401.php ErrorDocument 403 http://www.sortecard.com.br/403.php ErrorDocument 404 http://www.sortecard.com.br/404.php ErrorDocument 500 http://www.sortecard.com.br/500.php php_value allow_url_fopen on php_value allow_url_include on php_flag mail_filter 0 RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteRule ^(.*)$ index.php?page=$1 Problemas:
       
      A) Quando acesso a url diretamente não está redirecionando para o index.
      B) Quando falo que é para redirecionar todos os arquivos ele não me dá os parêmetros. 
×

Important Information

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