Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por douglas79
      Bom dia,

      Há alguns dias que venho instalar o apache, o php, mysql e o phpmyadmin manualmente e sem obter sucesso. Até consegui rodar o php, porém, quando vou baixar a úitima versão do MYSQL, não tem todos os pacotes nele instalados, inclusive no completo, só encontro o Router.
      Alguém pode me dizer o porquê que isso está ocorrendo?
      Desde já agradeço a ajuda de vocês, que será bem vinda!
      No aguardo!

      Uso a versão 8.3.9 do PHP
      Meu SO é o Windows 10 32 bits
    • Por luiz monteiro
      Boa tarde!
      Estou tentando criar uma url amigável, porem o htaccess não reconhece o arquivo sem a extensão.
      O objetivo é deixar a url assim:
      https://dominio.com.br/arquivo/id
       
      Estou usando essa regra no HTACCESS
       
      RewriteEngine On
      RewriteCond %{SCRIPT_FILENAME} !-f
      RewriteCond %{SCRIPT_FILENAME} !-d
      RewriteRule ^(.*)$ index.php [NC,L]
       
      No wampserver local funciona, porem no servidor online não.
       
      No online só aceita dessa maneira
      https://dominio.com.br/arquivo.php/id
      Sem a extensão não aceita.
       
       
      Tentei assim também
       
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php [NC,L]
       
      No wampserver local ok, porem no online não.
       
      Estou recuperando a id com o filter_input(INPUT_SERVER, 'REQUEST_URI') que no wampserver tudo ok, apenas no online não
       
      Agradeço desde já.
       
    • Por Jack Oliveira
      Ola pessoal boa noite a todos...
      Estou tendo uma dificuldade em passar a url que esta sendo digitada no nagevador
      Ou seja uma das url ate que passa, porem as demais url não mostra sempre a mesma pagina que foi aberta
      Creio que seria um tipo de conflitos
      por exemplo: se eu acessar a seguinte url
      Ex1: meusite.com/sao-paulo/list/minha-empresa-aqui/
      e se eu acessar outra url com o mesmo no da empresa da seguinte forma
      Ex2: meusite.com/sao-paulo/catalogo/minha-empresa-aqui/
      ela teria que mostrar o que esta no EX2 mais porem fica na pagina do EX1 mais com a url no navegador do Ex2
      Bom e tbm preciso passar os paramentros da pagina de pesquisa 
      ou fazer uma busca a url me retorna a seguinte forma
      EX3: meusite.com/buscar/?search_string=mercados&cidade=sao-paulo
      e quero que seja mostrar desta forma, 
      EX4: meusite.com/sao-paulo/buscar/mercados/
      caso tenha paginação ela ficar assim ao pegar paginação meusite.com/sao-paulo/buscar/mercados/12/
      Ou seja o que preciso é que não importar quanto paramentros seja queria que mostrasse conforme mostra no comentario do PHP
      segue o código logo a baixo com htaccess
      Talvez seja até coisa simples de se resolver ou pode ser eu fazendo da forma incorreta aqui...
       
      HTACCESS
       
      RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [NC,L] INDEX.PHP
       
      <?php ob_start(); session_cache_expire(60); //session_start(); if (!file_exists('CPANELUSER/database/config.php')) { header("Location: CPANELUSER/setup.php"); } else { require_once ('CPANELUSER/database/config.php'); } require_once ('CPANELUSER/database/config.painel.php'); require_once ('CPANELUSER/database/config.database..php'); require_once ('CPANELUSER/database/config.session.php'); require_once ('CPANELUSER/includes/funcoes.php'); // Obtendo o URL dos arquivos atual //$page = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1); function UrlAmigavelPHP(){ if(isset($_GET['url'])) { $url = $_GET['url'] ? $_GET['url'] : "home"; //$search_string = $_GET['search_string'] ? $_GET['search_string'] : "home"; //$cidade = $_GET['cidade'] ? $_GET['cidade'] : "home"; //var_dump($url); //var_dump($search_string); //var_dump($cidade); $UrlFormatada = explode('/', $_SERVER['REQUEST_URI']); if(empty($UrlFormatada[1])) { $URL1 = ''; }else{ $URL1 = ''.$UrlFormatada[1].'/'; } if(empty($UrlFormatada[2])) { $URL2 = ''; }else{ $URL2 = ''.$UrlFormatada[2].'/'; } if(empty($UrlFormatada[3])) { $URL3 = ''; }else{ $URL3 = ''.$UrlFormatada[3].'/'; } if(empty($UrlFormatada[4])) { $URL4 = ''; }else{ $URL4 = ''.$UrlFormatada[4].'/'; } if(empty($UrlFormatada[5])) { $URL5 = ''; }else{ $URL5 = ''.$UrlFormatada[5].'/'; } if(empty($UrlFormatada[6])) { $URL6 = ''; }else{ $URL6 = ''.$UrlFormatada[6].'/'; } //Passando a url completa $Paramentros = ''.$URL1.''.$URL2.''.$URL3.''.$URL4.''.$URL5.''.$URL6.''; }else{ $url = 'home'; } switch($url) { //HOME case 'home'; include_once('directory-home.php'); //meusite.com/cidade-principal/ que vai aparecer no index.php break; //LISTAGEM case $Paramentros; include_once('directory-listagem.php'); //meusite.com/cidade-principal/list/nome-de-uma-empresa/ break; //CATALOGO case $Paramentros; $Query = DBRead('directory_cidades','*',"WHERE status='1' AND slug='".GetUrlBasecidade."'")[0]; $TblEmpresa = DBRead("directory_listing","*","WHERE slug='".GetUrlBase."' AND cidade='{$Query['titulo']}'"); if (is_array($TblEmpresa)) { foreach ($TblEmpresa as $Empresa) { extract($Empresa); $titles = ''.trim(mb_convert_case($titulo, MB_CASE_TITLE, "UTF-8")).' | '.trim(mb_convert_case(ConfigPainel("site_nome"), MB_CASE_TITLE, "UTF-8")).''; $getId = $id; $getu = $id_user; //Url Menu Lateral das Empresas $CidadeUrl = ''.ConfigPainel("site_url").''.GetUrlBasecidade.'/'; $UrlEmpresa = ''.$CidadeUrl.'list/'.GetUrlBase.'/'; $UrlCatalogo = ''.$CidadeUrl.'catalogo/'.GetUrlBase.'/'; $UrlPortfolio = ''.$CidadeUrl.'portfolio/'.GetUrlBase.'/'; $UrlEventos = ''.$CidadeUrl.'agenda/'.GetUrlBase.'/'; $UrlClassificados = ''.$CidadeUrl.'vagas/'.GetUrlBase.'/'; $UrlContato = ''.UrlAmigavel($menu5).''; //Pegando os ids switch ($Empresa['id_destaque']) { case '5': $index_seo = ''; break; case '4': $index_seo = 4; break; case '3': $index_seo = 3; break; case '2': $index_seo = 2; break; case '1': $index_seo = 1; break; case '0': $index_seo = 0; break; } $Query = DBRead('directory_itens','*',"WHERE status='1' AND user_id='{$getu}' ORDER BY nome_item ASC LIMIT 100"); $NomeCity =''.$cidade.''; define("METAKEYWORD", $palavra_chave); define("METADESCRIPTION", $frase); define("METATITLE", ''.(!empty($definir) ? 'Cardápio | '.LetraMaiuscula($titulo) : 'Catálogo | '.LetraMaiuscula($titulo).'').' | '.ConfigPainel("site_nome").''); //1 Cardápio > 2 Catálogo > 3 Imóveis > 4 Produtos //Configuração $QueryEmpresa = DBRead('directory_listing','*',"WHERE id_user='{$getu}' ORDER BY id LIMIT 1")[0]; //company-product $QueryItemCount = DBRead('directory_itens','*', "WHERE status= '1' AND user_id='{$getu}' ORDER BY nome_item")[0]; if($definir == 1) { $Menu1 = $QueryEmpresa['menu1']; if($QueryItemCount['user_id'] == $getu) { $Status1 = 1; //1 Ativo }else{ $Status1 = 0; //0 Inativo } $Icone = 'fa-cutlery'; }elseif($definir == 2) { $Menu1 = $QueryEmpresa['menu1']; if($QueryItemCount['user_id'] == $getu) { $Status1 = 1; //1 Ativo }else{ $Status1 = 0; //0 Inativo } $Icone = 'fa-shopping-bag'; }elseif($definir == 3) { $Menu1 = $QueryEmpresa['menu1']; if($QueryItemCount['user_id'] == $getu) { $Status1 = 1; //1 Ativo }else{ $Status1 = 0; //0 Inativo } $Icone = 'fa-home'; }elseif($definir == 4) { $Menu1 = $QueryEmpresa['menu1']; if($QueryItemCount['user_id'] == $getu) { $Status1 = 1; //1 Ativo }else{ $Status1 = 0; //0 Inativo } $Icone = 'fa-product-hunt'; } //company-portfolio $QueryPorCount = DBRead('directory_portifolio','*', "WHERE status= '1' AND id_user = '{$getu}' ORDER BY id")[0]; $Menu2 = $QueryEmpresa['menu2']; if($QueryPorCount['id_user'] == $getu) { $Status2 = 1; //1 Ativo }else{ $Status2 = 0; //0 Inativo } //company-events $Menu3 = $QueryEmpresa['menu3']; $QueryAgCount = DBRead('directory_agenda','*', "WHERE status= '1' AND idempresa = '{$getId}'")[0]; if($QueryAgCount['idempresa'] == $getId) { $Status3 = 1; //1 Ativo }else{ $Status3 = 0; //0 Inativo } //company-blog $QueryNumBlog = DBRead('directory_emprego','*',"WHERE status='1' AND id_empresa = '{$getId}'")[0]; $Menu4 = $QueryEmpresa['menu4']; if($QueryNumBlog['id_empresa'] == $getId) { $Status4 = 1; //1 Ativo }else{ $Status4 = 0; //0 Inativo } //company-contact $Menu5 = $QueryEmpresa['menu5']; define("METAURL", "".ConfigPainel("site_url")."".$UrlCatalogo.""); define("METAIMAGEM", "".ConfigPainel("site_url")."assets/".GetUrlBase."/".$logo.""); if (empty($index_seo)) { define("METAINDEXAR", "noall, noindex, nofollow"); //noall, noindex, nofollow //Redireciona(ConfigPainel("site_url")); }else{ define("METAINDEXAR", "all, index, follow"); //all, index, follow } } } else{ //Redireciona(''.ConfigPainel("site_url").''.UrlAmigavel($cidade).'/'); } require_once('Inc/hora.php'); $diasemana = array('Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sabado'); $data = date('Y-m-d'); $diasemana_numero = date('w', strtotime($data)); $diadehoje = $diasemana[$diasemana_numero]; //$todososdias = 'null'; include_once('directory-catalogo.php');//meusite.com/cidade-principal/catalogo/nome-de-uma-empresa/ break; //PORTFOLIO case $Paramentros; include_once('directory-portfolio.php');//meusite.com/cidade-principal/portfolio/nome-de-uma-empresa/ break; //AGENDA case $Paramentros; include_once('directory-agenda.php');//meusite.com/cidade-principal/agenda/nome-de-uma-empresa/ break; //BLOG case $Paramentros; include_once('directory-blog.php');//meusite.com/cidade-principal/vagas/nome-de-uma-empresa/ break; //PESQUISAR case $Paramentros; include_once('directory-buscar.php');//meusite.com/cidade-principal/buscar/loja/ break; //SOBRE case $Paramentros; include_once('directory-sobre.php');//meusite.com/cidade-principal/sobre/ break; //PLANO case $Paramentros; include_once('directory-plano.php');//meusite.com/cidade-principal/plano/ break; //CONTATO case $Paramentros; include_once('directory-contato.php');//meusite.com/cidade-principal/contato/ break; default; include_once('directory-404.php'); break; } } UrlAmigavelPHP(); ?> Perdoa se ficou muito grande os codigo ai na parte do catalogo coloquei para poder ver como estou recendo os paramentros
       
      Desde já fico no guardo se alguém puder dar uma idiea ai
    • Por mateus.andriollo
      Tenho a necessidade de implanta htaccess apenas em uma subpasta tipo dominio.com.br/produto aí teria dominio.com.br/produto/tp0001
       
      Ele retornaria apenas estes produto de código tp0001
       
    • Por Marcos RJ
      Bom dia, boa tarde, boa noite colegas.
       
      Tenho um projeto onde conterá diversos subdomínios. Ex.:
      empresa1.site.com.br empresa2.site.com.br empresa3.site.com.br Esses subdomínios acessarão o sistema que está dentro do seguinte diretório:
      site.com.br/sistema/ Gostaria de fazer com que os subdomínios acessassem o sistema sem alterar a url, pois o objetivo é quando fizer quaisquer alterações e/ou inclusões de novos recursos, não tenhamos a necessidade de fazer isso dentro de todos os subdomínios, haja vista que serão dezenas ou até mesmo centenas de subdomínios. As minhas tentativas foram diretamente no .htaccess:
      RewriteEngine on RewriteCond %{HTTP_HOST} ^empresa1.site.com$ [OR] RewriteCond %{HTTP_HOST} ^www.empresa1.site.com$ RewriteRule ^(.*) http://www.site.com/sistema/$1?key=empresa1 [P,L] E o PHP ficou dessa forma:
       
      $diretorio = $_REQUEST["key"]; if($directory != null){    require "http://".$diretorio.".site.com.br/sistema/class/conectCass.php"; }else{  require "conectClass.php";  } Mas não deu certo. Tentei diretamente pelo PHP, mas quando clico no link criado, ele me obriga que a página do link esteja dentro dos subdiretórios. Em cada subdomínio coloquei da seguinte forma:
      include 'sistema/'; E no index.php do diretório sistema/:
      $host = $_SERVER['SERVER_NAME']; $host = str_replace(['www.', '.site.com.br', 'site.com.br'], '', $host); if($host == '') {     // entra o conteúdo do sistema } else {     // Entra o conteúdo do subdomínio } Mas também não funcionou. Como eu poderia resolver isso?

      Muito obrigado!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.