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 unset
      Olá, eu formatei minha máquina e agora não consigo fazer rodar meu sistema.
       
      Instalei o Wampserver e agora o Xamp e eles não leem minhas url amigáveis, existe alguma configuração extra a se fazer?
       
      O modulo do arquivo httpd.conf esta ativado 
       
      LoadModule rewrite_module modules/mod_rewrite.so  
      meu htaccess
      <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 </IfModule> Os sites carrega normal mais ao clicar nos links por exemplo http://localhost/site/eventos da erro 404
       
      Error 404 localhost Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.2  
       
       
    • 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.
       
×

Important Information

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