Ir para conteúdo

Arquivado

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

Danilo CS

Ajuda Para ajustar essa regrinha de URL Amigável

Recommended Posts

Olá!

Queria uma forcinha num negócio aqui.

 

Eu quero fazer uma regrinha de URL amigável mas não está funcionando 100% como eu quero. Acredito que seja algo bobo...mas a verdade é que eu não consigo.

Muito bem... (nem tanto..hehe)

 

Eu quero que minha url seja assim > http://www.superdanilof1page.com.br/home/novidades

No entanto, eu não estou conseguindo, ela só funciona se faço se colocar uma "/" e escrever qualquer coisa ali depois de novidades, tipo "/abc"

 

Se eu colocar assim não funciona > http://www.superdanilof1page.com.br/home/novidades

Se eu colocar assim ou algo parecido funciona > http://www.superdanilof1page.com.br/home/novidades/abcndai

 

Regra do htaccess:

# Home
RewriteRule ^home\/([a-z,0-9,A-Z,_-]+)\/([a-z,0-9,A-Z,_-]+)$ home/home-artigo.php?home_slug=$1 [NC]

PHP:

$home = strip_tags($_GET["home_slug"]);
$home_sql = mysql_query ("SELECT * FROM home WHERE home_slug='". $home . "' ");
$home_qr_s = mysql_num_rows($home_sql);
$home_qr_l = mysql_fetch_array($home_sql);
$home_id =  $home_qr_l['home_id'];
$home_slug =  $home_qr_l['home_slug'];

Como eu tenho milhares de páginas anexadas no Google, os links precisa funcionar exatamente como eu quero. É porque antes estava tudo em HTML e agora eu fiz os links em BD :)


Valeuuu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, eu sempre usei assim:


RewriteEngine on
RewriteRule ^login login.html [NC,QSA,L]
RewriteRule ^principal index.php [NC,QSA,L]
DirectoryIndex login.html
Options -Indexes

 

Não preciso colocar nada depois de "principal" para acessar o index.php ou de "login" para chamar o login.html

 

Nesse exemplo eu omiti as regras específicas para os arquivos .php funcionarem ao utilizar o método $_GET que seriam "RewriteCond %{REQUEST_FILENAME}\.php -f"
e "RewriteRule ^(.*)$ $1.php" mas acredito que para o que você quer já serve.

Compartilhar este post


Link para o post
Compartilhar em outros sites
RewriteRule ^home\/([a-z,0-9,A-Z,_-]+)$ home/home-artigo.php?home_slug=$1 [NC]

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, Sergio S. F. Pereira disse:

Bom dia, eu sempre usei assim:

 


RewriteEngine on
RewriteRule ^login login.html [NC,QSA,L]
RewriteRule ^principal index.php [NC,QSA,L]
DirectoryIndex login.html
Options -Indexes

 

 

Não preciso colocar nada depois de "principal" para acessar o index.php ou de "login" para chamar o login.html

 

Nesse exemplo eu omiti as regras específicas para os arquivos .php funcionarem ao utilizar o método $_GET que seriam "RewriteCond %{REQUEST_FILENAME}\.php -f"
e "RewriteRule ^(.*)$ $1.php" mas acredito que para o que você quer já serve.

 

Olá, bom dia!

Então, na verdade, eu ainda não entendo muito bem como funciona o htaccess, eu apenas faço igual aos conteúdos que encontro na internet. Mas não foi falta de tentar aprender não...mas enfim...

O início da regra eu fiz assim:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^superdanilof1page.com.br$ [OR]
RewriteCond %{HTTP_HOST} ^www.superdanilof1page.com.br$
RewriteRule ^home\/home\.php$ "http\:\/\/www\.superdanilof1page\.com\.br\/index\.php" [R=301,L]
RewriteCond %{HTTP_HOST} ^superdanilof1page.com.br
RewriteRule ^ http://www.superdanilof1page.com.br%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

E eu acho que essa dica do (*.).... eu acho que ja tentei também, mas eu vou tentar de novo também. Jaja eu falo no que deu :)

Mas ai para seguir a sua dica da regra do Rewrite precisa fazer a regra da parte de cima igual a que você falou também?

 

1 hora atrás, ESerra disse:

RewriteRule ^home\/([a-z,0-9,A-Z,_-]+)$ home/home-artigo.php?home_slug=$1 [NC]

 

 

Eu acho que já tentei assim...mas eu vou tentar de novo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então está dando tudo certo, mas estou com um probleminha....

 

# equipes
RewriteRule ^equipes\/([a-z,0-9,A-Z,_-]+)$ equipes/equipes-da-formula-1-artigo.php?equipes_slug=$1 [NC]
RewriteRule ^equipes\/([a-z,0-9,A-Z,_-]+)$ equipes/equipes-historicas-de-formula-1-artigo.php?equipes_historicas_slug=$1 [NC]

Essa regrinha acima é para dois arquivos diferentes. Só que a de baixo não funciona, por causa da de cima. O que será que posso fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nunca usei QUERY_STRING mas ao que tudo indica você vai precisar usar isto para dizer em quais condições deve redirecionar para determinada página.

18 horas atrás, Danilo CS disse:

Essa regrinha acima é para dois arquivos diferentes. Só que a de baixo não funciona, por causa da de cima. O que será que posso fazer?

Se a regra é para dois arquivos diferentes ela não pode ter o mesmo nome ^equipes

Você vai precisar de uma regra parecida com isto:


RewriteCond %{QUERY_STRING} ^equipes_slug=$1 [NC]
RewriteRule ^/equipes-da-formula-1-artigo$ /equipesf1/ [NC,L,R=301]

RewriteCond %{QUERY_STRING} ^equipes_historicas_slug=$1 [NC]
RewriteRule ^/equipes-historicas-de-formula-1-artigo$ /equipeshistf1/ [NC,L,R=301]

Onde equipesf1 é a url amigavel da primeira página e equipeshistf1 da segunda página. E também considerando que você já criou as urls amigavéis para estas páginas antes destas regras.

 

OBS: isto é só um exemplo pois eu não tenho como testar aqui essas regras.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vou tentando ae...obrigado.

Eu notei que só de fazer para um ^equipes e para o outro ^equipess já resolveria.

 

Minha preocupação era mesmo com as páginas já indexadas pelo Google ou em outros sites. Fico com receio em ter que remar tudo de novo. No entanto surgiu uma outra questão que ainda não sei como resolver. Se não tiver jeito essa outra questão, a primeira (a que eu postei) nem vai ter muita importância. Daí daria para inventar qualquer outra coisa....sabe?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se você fizer um arquivo php para redirecionar para os outros arquivos php baseado na sua requisição? daí poderia usar o mesmo nome e, internamente, redirecionar baseado nos GET´s

A sua url amigável, segundo seu exemplo, vai ser equipes certo? daí faça com que equipes redirecione para um arquivo php chamdo redir_equipes.php por exemplo, e dentro dele pega os gets e redireciona com header(location) passando os mesmos gets de volta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!!

Então...foi isso que eu fiz (quer dizer foi o que eu tentei fazer), mas não deu certo.

Um exemplo:

Essa página está indexada com esse endereço:
http://www.superdanilof1page.com.br/pilotos/pilotos-de-formula-1-stoffel-vandoorne.php

E eu deixei essa mesma página assim:
http://www.superdanilof1page.com.br/pilotos/pilotos-de-formula-1-stoffel-vandoorne

 

Mas se clicar no link do Google vai retornar como página não existente! =\

 

A chamada eu fiz assim olha:

$piloto = strip_tags($_GET["piloto_slug"]);
$piloto_sql = mysql_query ("SELECT * FROM pilotos_f1 WHERE piloto_slug='". $piloto . "' ");

PS: Tanto para essa página "piloto" como para "equipes" eu fiz usando a mesma estrutura, apenas alterei os nomes :)

 

Pior que essa parte que você sugeriu eu já não sei como fazer :(

Citar

daí faça com que equipes redirecione para um arquivo php chamdo redir_equipes.php por exemplo, e dentro dele pega os gets e redireciona com header(location) passando os mesmos gets de volta

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Sergio S. F. Pereira disse:

E você tem a regra 

#RewriteRule ^pilotos/pilotos-de-formula-1-stoffel-vandoorne  pilotos/pilotos-de-formula-1-stoffel-vandoorne.php [NC,QSA,L]

 

?

 

Essa regra não....

Mas ai escreveria exatamente assim? É que eu coloquei la para testar eu não funcionou

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, Sergio S. F. Pereira disse:

isso mesmo

 

Pelo menos o htaccess principal não ficaria tão pesado né!

Daria ter que fazer link por link, né?

 

Daria um trabalhinho, mas é melhor que perder tudo que já consegui indexar né!?!

 

(né né né...heheeh)

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desse jeito que passei por último funcionou para esta página ?

Se sim agora no .htacess da pasta pilotos você escreve as regras para todos os arquivos da pasta, igual você tava fazendo antes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igual igual você sugeriu ainda não. Mas enquanto eu aguardava suas respostas eu só tinha tentado isso:

redirect 301 /pilotos/pilotos-de-formula-1-stoffel-vandoorne.php http://www.superdanilof1page.com.br/pilotos/pilotos-de-formula-1-stoffel-vandoorne

Obviamente assim deu, mas ai teria que fazer arquivo por arquivo...Isso seria a mesma coisa, ou não?

 

Eu criei um arquivo e coloquei lá. Mas por enquanto está dando erro externo 500

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
    • Por ckcesar
      Eu tenho uma aplicação no zend com a versão 5.6 e com o postgresql 9.6. Agora eu precisei mudar a versão do meu postgresql para o 16.1, a parte de conexão do bd e consultas sqls funciona perfeitamente, o meu problema está para acessar os meus controllers. Eles não são encontrados em nenhuma rota, quero ver se alguém já passou por esse problema para me ajudar. Obrigado.
    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
×

Informação importante

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