Para quem trabalhar com URL amigável, um momento terá que trabalhar com busca, e também paginação, provavelmente encontrará um entrave nessa situação.
Nos formulários utilizamos o método GET, para se precisarmos manter as informações de pesquisar, principalmente na paginação, podemos passar essas informações na URL.
Se você utilizou um formulário com método GET já reparou que ele adiciona um sinal de interrogação na URL, porque dessa forma está dizendo que está passando parâmetros e valores.
Mas se você estiver utilizando no seu . htaccess, essa expressão abaixo, onde utilizamos o parâmetro pg para definir que tipo página será chamada, você encontrará um problema:
RewriteRule (.*) índex.php?pg=$1
Vamos dizer que para realizar a busca ficaria assim a URL
www.seusite.com.br/pesquisar?busca=palavra
Só que lembre, que na verdade a forma que será vista pelo servidor
será essa:
www.seusite.com.br/index.php?pg=pesquisar?busca=palavra
Mas o problema de ocorrer isso? Simples, por padrão o RewriteRule irá substituir a query string (?pg=pesquisar), pela mais recente (?busca=palavra), e com isso você não terá mais o valor pg pra definir a página, e com isso a pagina de pesquisa nunca será chamada.
Para resolver isso, basta adicionamos uma flag no RewriteRule, que irá mesclar as duas querystring, sendo interpretado dessa forma:
www.seusite.com.br/index.php?pg=pesquisar&busca=palavra
A flag é [QSA], ficando assim RewriteRule:
RewriteRule (.*) índex.php?pg=$1 [QSA]
Com essa modificação, você não terá problema em a query string ser reescrita.
Ótimo tutorial David!
Vlw Lucas
Este tutorial me ajudou muito!
Muito obrigado!
Vlw Maycon
Ola David, então eu adicionei este comando no meu htacess, mas como faço para remover o GET da url, esta assim ainda ?s=PALAVRA-CHAVE
Vc terá q recuperar os valores via javascript, e montar a URL, e enviar pra página com nova URL, exemplo:
[html]
<form action="" id="formBusca" method="get">
<input type="text" name="busca" id="busca" />
<input type="submit" value="Buscar" />
</form>
[/html]
[javascript]
$(function(){
$("#formBusca").submit(function(){
var busca = $("#busca").val();
window.location = ‘http://www.seusite.com.br/buscar/’+busca;
return false;
});
});
[/javascript]
Deu certinho aqui David, Obrigado e parabéns.
Ola seu que este post é antigo mais estou com o mesmo problema tentei usar o ex ai em cima mais não deu certo
Meu .htaccess esta desta forma
RewriteEngine On # Turn on the rewriting engine
# not rewrite css, js and images
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpg|gif|png)$ [NC]
# pegando url da listing
RewriteRule ^([a-z,0-9,A-Z,_-]+)\/([a-z,0-9,A-Z,_-]+)\/?$ listing.php?titulo=$1&id=$2 [NC,L]
# pegando url da home
RewriteRule ^home home.php [NC,L]
# pegando url da busca
RewriteRule ^job_grid/([a-z,0-9,A-Z,_-]+)\/?$ job_grid.php?wa7=$1 [NC,L]
#RewriteRule ^job_grid job_grid.php [NC,L]
Header set Access-Control-Allow-Origin “*”
Meu form esta assim
<input type="text" class="form-control" name="wa7" placeholder="”>
no meu php esta assim
Se puder ajudar ficaria grato
David, como faço para executar um arquivo em pdf quando estou utilizando url amigável?
Vc quer acessar um link pra um arquivo PDF ? Vc pode acessar normalmente, desde q tenha essa regra no seu htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
Tenho um site que pode ser http ou https, e quero configurar o htaccess com urls dinâmica é possível ?
Para remover o www
exemplo:
RewriteCond %{http_host} ^www.qualquersite.com.br [NC]
RewriteRule ^(.*)$ http://qualquersite.com.br/$1 [R=301,L]
Vc pode tentar fazer algo assim:
[php]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^%1%3%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?pg=$1 [L,QSA]
[/php]
Não funcionou =/
Meu .htaccess esta assim atualmente.
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
Encontrei essa solução
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Aqui não deu certo. Já adicionei [QSA] no final da linha do RewriteRule e mesmo assim não funciona. O servidor lê a url somente até onde tem o ponto de interrogação (?) e ignora o restante
José, pode me mostrar como está seu htaccess?
Boa dia amigo,
Eu tenho um site aqui.. que ele trabalha da seguinte forma:
Eu passo por um parâmetro chamado pag com o nome da página que será visualizada e no arquivo index.php é feito um tratamento para exibir essa determinada página..
Por exemplo:
localhost/?pag=adm é exibido a pagina de administração.
Como eu poderia fazer para esconder esse parâmetro?
Algo que ficasse assim:
Se fosse pag=adm, no lugar de exibir como descrito acima fosse mostrado localhost/adm..
ou no caso de ?pag=contato fosse exibido localhost/contato ?
Alguem tem alguma ideia?
Diego, tem uma videoaula e um tutorial sobre o assunto, dá uma olhada:
https://www.davidchc.com.br/video-aula/php/trabalhando-url-amigavel-com-php/
https://www.davidchc.com.br/tutoriais/php-tutoriais/mais-sobre-url-amigavel-com-php/
Quem diria que seriam necessárias apenas 3 letrinhas pra resolver um problema de dias rsrsrs.
Ótimo tutorial 😀
Boa Tarde, David
Estou fazendo um site com url amigável, mas me apareceu um entrave no qual já vasculhei, procurei, tentei e nada até agora.
Como fazer funcionar phpthumb com a url amigável?
Tenho o arquivo desta maneira:
id”;
$resultado_fot = mysql_query($consulta_fot);
$registros_fot = mysql_num_rows ($resultado_fot);
$filename =”http://www.meusite.com.br/teste/remoto/galeria_fotos/”;
$filename .= “foto_galeria_”.”$linha->id”.”.jpg”;
if (file_exists($filename))
{
list($largura, $altura) = getimagesize($filename);
}
// formata a data no padrão brasileiro
$data = explode(‘-‘, $linha->data);
$data = $data[2].’/’.$data[1].’/’.$data[0];
?>
$altura)
{
echo “”;
}
else
{
echo “”;
}
}
?>
Mas não funciona de jeito nenhum, as imagens ficam quebradas.
Se possível for me ajude com isto porque sei que deve ser algo extremamente simples, mas infelizmente não consigo enxergar.
Obrigado
Faça o seguinte, no head do seu html, adicione:
[html]
<base href="http://seusite.com.br" />
[/html]
Caso não funcione, coloque a URL completa até a sua imagem ou arquivo referente a imagem
Fiz questão de comentar aqui, era o que eu estava procurando há um tempo e ajudou muito.
Simples e objetivo
Valeu
Cara!!! Você salvou a minha pele veio… Excelente postagem! Já estava para criar uma função para pegar a danada da variável GET. kkkk