Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá estou com uma dúvida.
Há alguns anos criei meu site no formato query string amigável, porem ele não mostrava a extensão ficava assim:
http://site.com/produto/televisor
agora mudei o .htaccess para
RewriteRule ^([A-Za-z0-9-/_]+)/?$ index.php?Produto=$1 [qsappend]
RewriteRule ^([A-Za-z0-9-/_]+)\.html?$ index.php?Produto=$1 [qsappend]
E ele exibe
http://site.com/produto/televisor.html
O problema que ele mosta também da forma antiga
http://site.com/produto/televisor
Teria como fazer um .htaccess para que ele redirecionasse sempre que não tivesse a extensão para a com .html?
Então o problema de usar apenas a segunda linha é que gera erro e nem o 404 ele aparece, mas como tenho muitas URLs iria perder o page rank então gostaria que ele direcionasse tudo sem o .html para .html
Então mantém seu .htaccess desse jeito mesmo.
Altera o seu index.php, pode colocar logo no começo dele isso:
<?php
$path = $_SERVER['REQUEST_URI']; //pega o caminho que tentou acessar
$ext = explode('.', $path); //procura pontos no caminho
if (count($ext) > 0) { //se tiver pelo menos um ponto
$ext = end($ext); //pega a extensao
}
if ($ext != 'html') { //verifica se a extensão é diferente de HTML (se não tiver pontos, o endereço todo também vai ser diferente, então executa do mesmo jeito)
$lastchar = substr($path, -1, 1); //pega o último caractere do caminho
if ($lastchar == '/') { //verifica se o último caractere é uma barra
$path = substr($path, 0, -1); //se for, tiramos para poder ficar certo qdo colocar a extensao antes de redirecionar
}
header('HTTP/1.1 301 Moved Permanently'); //isso vai ajudar os buscadores a indexarem o novo endereço para pesquisa, pois informa que mudou de endereço permanentemente
header("Location: " . $path . ".html"); //isso vai redirecionar pro mesmo endereço só que com ".html"
exit; //apenas pra ter certeza que o script para de executar depois de redirecionar, não tem mais motivos pra continuar executando
}
Deixei os comentários explicando o que o código faz. Eu testei já, então está com certeza funcionando.
Espero ter resolvido. Abraços.
Nossa testado e funcionando perfeitamente!
Obrigado
Disponha.
Amigo, não te resolveria se vc usasse apenas a segunda linha no .htaccess?
RewriteRule ^([A-Za-z0-9-/_]+)\.html?$ index.php?Produto=$1 [qsappend]
Abs.