Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, boa noite e boa tarde pessoal, é com enorme prazer, que eu crio este tópico, com foco em quem quer aprender URL`s amigáveis.
Primeiramente, vamos falar sobre ER ou Expressões regulares, segundo a Wikipedia:
>
Em ciência da computação, uma expressão regular (ou o estrangeirismo regex, abreviação do inglês regular expression) provê uma forma concisa e flexível de identificar cadeias de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres. Expressões regulares são escritas numa linguagem formal que pode ser interpretada por um processador de expressão regular, um programa que ou serve um gerador de analisador sintático ou examina o texto e identifica partes que casam com a especificação dada.
Elas servem, basicamente, para se fazer validações de dados, e são usadas para reescrever as famosas URL`s amigáveis, que nem todo mundo conhece.
Vamos partir do princípio! Uma expressão regular é essencialmente um padrão. É com base nesse padrão que a expressão em questão será avaliada. Primeiro vamos aprender a sintaxe das expressões para depois aprender como fazê-las funcionar…
A principio, os principais operadores, são este:
Operador ^
Pra resumir, este operador, significa início
Operador $
Pra resumir, este operador, significa fim
Operador [a-z]
Significa qualquer caractere minúsculo de a à z
Operador [A-Z]
Significa qualquer caractere maiúsculo de A à A
Operador [0-9]
Significa qualquer caractere numérico
Como, ER não são o foco do tutorial, partiremos logo para o PHP e Apache, quem quer conhecer melhor as Expressões Regulares, podem estar lendo o manual delas, que é este.
Primeiramente, você irá abrir o notepad do Windows(O meu é Windows), e salvá-lo na raiz do seu site dessa maneira ".htaccess", com aspas, depois abra-o em seu editor preferido, e acrescente o seguinte código ao seu arquivo:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
Vamos aprender linha por linha:
1 - Ativa o modo de reescrita do apache
2 - Diz que a regra não será aplicável para arquivos (f de Files)
3 - Diz que a regra não será aplicável para diretórios (d de Directories)
E agora, pensaremos como queremos que fiquem as nossas novas URL`s, vamos dizer, que eu tenho a seguinte URL
www.meusite.com.br/empresa.php
e que eu quero transformá-la em
www.meusite.com.br/empresa/
Em seu htacces, faria assim:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
RewriteRule ^empresa/?$ empresa.php
Vamos entender, primeira parte da regra, ^empresa/?$ empresa.php:
Deve inicar com empresa e no final, ter ou não uma barra
Vamos entender, a segunda parte da regra, ^empresa/?$ empresa.php:
Esta seria como a URL seria sem, o uso de URL`s amigas
Ok, acontece, que em todos os tutoriais na net, apresentam somente até aqui, e eu não, eu vou ensinar como criar as páginas PHP para as regras serem aplicadas, então não se desanime e continue a ler.
Pra início de conversa, você irá criar uma página em seu editor, com DOCTYPE, tudo certinho, nomeia como "empresa.php" e salve também na raiz do seu site. E no seu htaccess, ficará assim:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
RewriteRule ^empresa/?$ empresa.php
Agora abra seu navegador, e digite na barra de endereços: www.meusite.com.br/empresa/
Se tudo estiver funcionando, continue lendo, se não, volte e leia o tutorial novamente.
E depois que fizer isso, e quando precisar criar outra página, você só copia a página "empresa.php" e depois renomeia, e a regra, aplique da maneira que você aprendeu.
Legal, mas agora eu preciso passar parâmetros pelas páginas, como faço?
É simples, imagine que você tenha que passar o id de uma notícia via GET, daí você tem a página "noticias.php", que é para listar as notícias, e a página "noticia.php", que serve para ver a notícia em uma página single. Vamos supor que você teria que passar via url o id da notícia, e o slug, você faria uma listagem das notícias normalmente, e nos links aplicaria:
<a href="www.meusite.com.br/<?php echo $id."/".$slug;?>"><?php echo $titulo;?></a>
No seu htaccess, faria desse jeito:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
RewriteRule ^empresa/?$ empresa.php
RewriteRule ^noticias/?$ noticias.php
RewriteRule ^noticias/([0-9]+)/([a-zA-Z0-9]+)/?$ noticia.php?id=$1&slug=$2
Entendendo, RewriteRule ^noticias/([0-9]+)/([a-zA-Z0-9]+)/?$ noticia.php?id=$1&slug=$2:
^noticias/([0-9]+)/([a-zA-Z0-9]+)/?$
Amarelo: Como a url deve começar
Vermelho: Expressão regular para aceitar somente dados numéricos, 1,2,3,4,5 etc
Laranja: Expressão regular para aceitar qualquer coisa, 1wan,45wan,wanderson, etc
E no seu notícia.php, para receber os dados, faria normalmente com os nomes definidos em seu arquivo htaccess
$id = (int)$_GET['id'];
$slug = $_GET['slug'];
// Faria uma consulta ao banco de dados
É isso pessoal, caso você tem alguma dúvida, sugestão ou alguma coisa para dizer, o tópico está aberto, boa noite para você.
Ok Ronal Gato, em caso de dúvidas, é só postar.
Update, onde está:
RewriteCond %{SCRIPT_FILENAME}% -f
RewriteCond %{SCRIPT_FILENAME}% -d
Troque por:
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
Eu tinha esquecido do !.
Hum tinha percebido mais achei que desse jeito também ia
Wanderson Valerio
Uma duvida tenho uma pasta na raiz do site e dentro dessa pasta tem um arquivo
como faço para fazer url amigavel desse jeito ?
>
Wanderson Valerio
Uma duvida tenho uma pasta na raiz do site e dentro dessa pasta tem um arquivo
como faço para fazer url amigavel desse jeito ?
Dentro da pasta, você cria um novo arquivo .htaccess, e nele você vai aplicar.
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
>
Dentro da pasta, você cria um novo arquivo .htaccess, e nele você vai aplicar.
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
Mais podem conter 2 ou mais .htaccess em um site so mais claro separados por pastas??
bem legal o artigo, aprendi esses dias e to me dando muito bem..
voce deveria explicar sobre as flags também.. [NC] , [L] , [NC,L] , etc
pode ser importante em alguns casos..
e uma coisa que me PREJUDICOU muito na criação de um site é o tratamento com CSS, JS e Imagens..
uma simples tag base na head resolveu todos os problemas..
por exemplo, quando utilizamos um site numa pasta (site.com/siteaqui/index.php), ai elementos como imagens, css, javascripts não são lidos por causa da url amigavel, acaba tratando como outra /pasta/, então nas paginas basta adicionar uma simples tag dentro de <head>: <base href="http://www.site.com/siteaqui/ "/>
e tudo estará resolvido!
Mas é isso ai, Parabéns!
>
Mais podem conter 2 ou mais .htaccess em um site so mais claro separados por pastas??
Sim ronal-gato, podem conter sim, e a mesma coisa, se você quer bloquear a URL amigável na administração do site por exemplo.
RewriteEngine Off
E a pasta que você colocar o .htaccess com o código acima, será bloqueado a regra de reescrita, pois em administração de sites, não acho que precise de URL amigável.
lightfox
Para que serve essa tag base não entendi ?
Se puder me falar por que não estou encontrando nada na net explicando para que serve
>
bem legal o artigo, aprendi esses dias e to me dando muito bem..
voce deveria explicar sobre as flags também.. [NC] , [L] , [NC,L] , etc
pode ser importante em alguns casos..
e uma coisa que me PREJUDICOU muito na criação de um site é o tratamento com CSS, JS e Imagens..
uma simples tag base na head resolveu todos os problemas..
por exemplo, quando utilizamos um site numa pasta (site.com/siteaqui/index.php), ai elementos como imagens, css, javascripts não são lidos por causa da url amigavel, acaba tratando como outra /pasta/, então nas paginas basta adicionar uma simples tag dentro de <head>: <base href="http://www.site.com/siteaqui/ "/>
e tudo estará resolvido!
Mas é isso ai, Parabéns!
Qualquer dia, eu criarei um tópico para falar sobre as flags.
Eu pesquisei mais e ja achei aqui mesmo no imasters
http://forum.imasters.com.br/topic/404580-manual-do-html-tag-base/
Pelo que entendi a tag base e como se fose para que você não precise colocar a url completa do site em href so os nomes de pastas ou de documentos
@ronal-gato, é assim, como o amigo disse acima, ela te dá um padrão para os diretórios do site, tipo:
<base href="www.meusite.com.br/" />
Este á pasta(Na imaginação) padrão para os diretórios do meu site, daí vamos supor que você tenha uma pasta no seu site chamada "images", então pra acessá-la pelo browser, seria assim: www.meusite.com.br/images, e quando usamos URL amigável, os elementos CSS, Javascript e outros, não são lidos devido ao caminho que fica errado, mas se você aplica a tag base, você pega os elementos a partir do caminho definido nela, veja.
<base href="www.meusite.com.br/" />
<!-- Pra acessar a pasta images do seu site, faria assim: -->
<a href="images/imagem.jpg">Ver pasta</a>
Sem que você precise dizer fazer tudo com o domínio, entendeu?
Wanderson Valerio
Entendi por que usando url amigavel ele so estaria mostrando o nome e a estensão na pagina sem mostrar a foto certo?
Exato, mostraria o nome da imagem e tudo certo, mas o caminho estaria incorreto.
Wanderson Valerio
Eu estava lendo uns tutorias e me deparei com esses codigos no .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?key=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1
Ai fiquei curioso por que em tutoriais que vi por ai nunca usavam
duas veses essa tags
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Ai queria saber se em cada url que eu ir tratar devo usar assim
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ single.php?$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ index?$1
Fonte da onde peguei isso
http://rotinadigital.net/wordpress/urls/
Gostaria de saber se esta certo utilizar desse jeito
Não ronal, isso só se aplica uma vez no seu .htaccess, deixa o que te mostrei mesmo.
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
A condição para arquivos e diretórios, é só uma vez por .htaccess entendeu?
exemplo de um .htaccess meu aqui, talvez ajude o Ronal:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /pasta_site/
ErrorDocument 400 /index.php
ErrorDocument 401 /index.php
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
ErrorDocument 500 /index.php
RewriteRule ^home/?$ index.php [NC,L]
RewriteRule ^licoes/?$ licoes.php [NC,L]
RewriteRule ^atendimento/?$ atendimento.php [NC,L]
RewriteRule ^cadastro/?$ cadastro.php [NC,L]
RewriteRule ^metodologia/?$ metodologia.php [NC,L]
RewriteRule ^mensagens/?$ mensagens.php [NC,L]
RewriteRule ^administradores/?$ administradores.php [NC,L]
RewriteRule ^alterar-dados/?$ alterar-dados.php [NC,L]
RewriteRule ^autenticacao/?$ autenticacao.php [NC,L]
RewriteRule ^cadastrar-administrador/?$ cadastrar-administrador.php [NC,L]
RewriteRule ^home-gerenciar/?$ home-gerenciar.php [NC,L]
RewriteRule ^metodologia-gerenciar/?$ metodologia-gerenciar.php [NC,L]
RewriteRule ^parceiros-gerenciar/?$ parceiros-gerenciar.php [NC,L]
RewriteRule ^usuarios/?$ usuarios.php [NC,L]
RewriteRule ^usuario/?$ usuario.php [NC,L]
RewriteRule ^mensagem/?$ mensagem.php [NC,L]
RewriteRule ^parceiros/?$ parceiros.php [NC,L]
RewriteRule ^usuario/([a-z0-9-]+)/?$ usuario.php?id=$1 [NC,L]
RewriteRule ^mensagem/([a-z0-9-]+)/?$ mensagem.php?id=$1 [NC]
Tenho uma página topo.php, uma lateral.php e outra rodape.php, utilizo include delas nas paginas citadas no htaccess.
To assinando este tópico @Wanderson Valerio muitoo bom... Parabéns, ainda não testei o código ai, mas tenho interesse em aprender mais sobre URL's Amigáveis... mandou bem.. valeu. :clap:
Valeu Marcelão, muito obrigado pela credibilidade. Em breve, eu quero estar lançando um curso de desenvolvimento de sites em tableless aqui no fórum, não perca, e se tudo der certo, depois irei aplicar administração no site criado aqui também.
lightfox
Obrigado por mostrar como você usa o .htaccess mais tenho uma outra duvida
Para que serve isso ? [NC,L] e tambem tem outros tipos se puder dar uma explicação agradeço?
E tem outra coisa quando eu vou tratar do jeito que o lightfox mostrou tirando a extesão do arquivo fui tentar fazer isso mais ele me retornou um erro ai eu retirei essa parte do .htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
E o erro sumiu algum sabe como posso tirar a extensão mais continuar a usar as RewriteCond eu acho que deu o erro por que eu fui tratar de arquivos tem como tratar de arquivos sem me mostrar esse erro?
>
lightfox
Obrigado por mostrar como você usa o .htaccess mais tenho uma outra duvida
Para que serve isso ? [NC,L] e tambem tem outros tipos se puder dar uma explicação agradeço?
E tem outra coisa quando eu vou tratar do jeito que o lightfox mostrou tirando a extesão do arquivo fui tentar fazer isso mais ele me retornou um erro ai eu retirei essa parte do .htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
E o erro sumiu algum sabe como posso tirar a extensão mais continuar a usar as RewriteCond eu acho que deu o erro por que eu fui tratar de arquivos tem como tratar de arquivos sem me mostrar esse erro?
Que erro deu?
Apesar de eu ser novo nisso também, nunca tive problemas com isso.
Leia este artigo sobre as Flags e RewriteCond: http://rield.com/cheat-sheets/mod-rewrite-syntax
Qualquer dúvida, poste ai ou crie um topico no suporte.. até mais
lightfox
Aparecia aquele erro 500 quando eu tentava assim
retirar o .php olha como eu fazia
RewriteRule ^noticias$ noticias.php
Mais desse jeito eu tinha que retirar as RewriteCond mais eu coloquei desse jeito ai sim foi
RewriteRule ^noticias$ noticias.php [NC,L]
>
Leia este artigo sobre as Flags e RewriteCond: http://rield.com/cheat-sheets/mod-rewrite-syntax
Esse site e muito bom mais o ruim que na parte das Mod_Rewrite Flags não esta tão explicado para que serve mesmo mais muito obrigado por colocar o site aprendi algumas coisas la
Gente consegui fazer url amigavel olha como fico meu .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.)/(.)/?$ index.php?categoria=$1&slug=$2 [NC,L]
tipo o arquivos .htacess ele funciona para todas as pasta ow em cada pasta tem que coloca um..??
Wanderson Valerio
Belo tutorial eu ainda não testei so o li por que estou com pouco tempo agora mais tarde eu vou para testalo e ´postar a resposta