Ir para conteúdo

Arquivado

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

Wanderson Valerio

Aprendendo URL`s amigáveis

Recommended Posts

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ê.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 `!`.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum tinha percebido mais achei que desse jeito também ia

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
# E aqui o código de reescrita como você deseja

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dentro da pasta, você cria um novo arquivo `.htaccess`, e nele você vai aplicar.

 

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}% !-f
RewriteCond %{SCRIPT_FILENAME}% !-d
# E aqui o código de reescrita como você deseja

Mais podem conter 2 ou mais .htaccess em um site so mais claro separados por pastas??

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
# E aqui o código de reescrita como você deseja

 

A condição para arquivos e diretórios, é só uma vez por .htaccess entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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