Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou utilizando o seguinte código no htaccess:
RewriteEngine on
RewriteCond %{QUERY_STRING} !=""
RewriteCond %{QUERY_STRING} ^titulo1=([0-9-a-z\-]+)$ [NC]
RewriteRule ^index.php(.*)$ http://meusite.com/%1? [R=301,L]
Ele redireciona tudo certo para a url amigável, porém exibi o erro 404, página não encontrada.
Com o código abaixo a url amigável funciona, encontra a página, mas só digitando diretamente no navegador, pois não redireciona de jeito nenhum:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?titulo1=$1
Eu gostaria de criar e redirecionar para a url amigável, como no primeiro código.
Eu testei aqui e está retornando erro 310 (TOO MANY REDIRECTS).
Talvez esteja acontecendo o seguinte. você está aí num fluxo infinito de redirecionamentos (esse problema é detectado pelo Apache e retorna erro 310 -- Too Many Redirects):
Se enviar uma requisição para http://meusite.com/index.php?titulo1=abc123, cai na primeira regra e redireciona para http://meusite.com/abc123, que por sua vez cai na segunda regra regra, que redireciona para http://meusite.com/index.php?titulo1=abc123, que cai novamente na primeira regra e o servidor detecta que isso não vai acabar nunca e retorna erro 310.
Eu resolveria da seguinte forma:
Redirecionamento direto para index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Detecção de URL Feia com PHP e redirecionamento para URL Amigável
$re = "^\/index.php\?titulo1=([0-9a-z-]+)$";
if (preg_match("/{$re}/i", $_SERVER['REQUEST_URI'], $res)) {
header("Location: " . $res[1], true, 301);
exit;
} else {
$titulo1 = substr($_SERVER['REQUEST_URI'], 1);
}
var_dump($titulo1);
Ola Lauro Daniel
tente mudar o código :
RewriteRule ^(.+)$ index.php?titulo1=$1
RewriteRule ^(.*)$ index.php?titulo1=$1