Ir para conteúdo

POWERED BY:

Arquivado

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

Kimura

[Resolvido] URL Amigável

Recommended Posts

Kimura...hoje mesmo eu estou desenvolvendo um sistema em que preciso de urls amigáveis...

 

Um artigo que me ajudou muito, talvez te ajude..ele trabalha com MVC e o exemplo usado te da o caminho das pedras pra fazer isso...não custa dar uma olhada...

 

http://www.phpbrasil.com/articles/article.php/id/1509

 

O que te interessa vai estar na paginação 3..mas é bom dar uma lida em tudo pra enteder melhor!

 

Espero ter ajudado =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá redenoos,

 

Conheço este tutorial, lhe agradeço mas não somou nesta ocasião.

 

Notei que existem muitos tópicos aqui no fórum sobre Urls Amigáveis, muitos deles não foram resolvidos, até mesmo, nem postado resposta alguma.

 

Eu, pelo menos, quero achar uma solução!

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da até pra fazer melhor, tirar o .html da página se você quiser ^^

Vou te mostrar o metodo que eu acho o mais simples:

 

1- Entre no seu httpd que deve tar na pasta do seu apache, se você usa o xampp tem la na pasta do apache.

No arquivo, usa um ctrl+f e procura por mod_rewrite.

Ele vai te achar uma linha, no começo da linha, se tiver um # , você tira ele e salva.

E aproveita e da um restart no servidor.

 

2- Depois, no seu diretorio do site, cria um arquivo .htaccess (escrito exatamente assim) e salva normal, nele você vai colocar isso:

 

RewriteEngine on
RewriteRule !\.(gif|png|css|js|txt|jpg)$ index.php

3 - Depois no seu arquivo index.php você edita assim:

 

<?php

$pagina = $_SERVER['REQUEST_URI'];

$pagina = explode('/',$pagina);

$ultimo_valor = $pagina[count($pagina)-1];

echo $valor;

//as urls são assim agora : meusite.com/nome_da_pagina

?>

beleza, dae você usa o index normal, mas toma muito cuidado com esas coisas:

- Com os includes que você fizer, pois o valor pego é o ULTIMO, então sinta-se livre para editar da forma que quiser,

se quiser, pode dar um print_r($pagina) pra achar o valor desejado.

Então toma cuidado pq o user pode sacar isso e tentar dar includes de partes que você não quer no site.

Fora que se você fizer conexão com o BD, você corre o risco de sql injection, se você não souber disso da uma olhada nesse artigo aqui :

http://imasters.com.br/artigo/5179/sql...omo_se_proteger

 

- Se Você quiser acessar pastas, você cria um .htaccess no diretório que você quer que seja acessado, e escreve isso:

RewriteEngine off
e pronto, vai dar pra acessar normalmente.

 

é isso ai, espero ter ajudado! :0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro _Piero,

 

Agradeço suas explicações, mas quero explicações sobre as regras (RewriteRules) e condições(RewriteCond) para o .htaccess dos meus tipos de url.

 

Note lá na minha postagem inicial que tenho diferentes chamadas de url, um exemplo:

 

http://localhost/DIRETORIO_DO_MEU_SITE/index.php?pagina=contato
O que estou dizendo com esta linha acima?

Resp.: que estou incluindo a página contato.php dentro da index.php, tradicionalmente feito com includes e querystring, correto?

 

Mas quero eliminar este jeito que estou usando e passar a usar:

http://localhost/DIRETORIO_DO_MEU_SITE/contato
com ou sem .html, não importa neste primeiro momento.

 

Vou te dar um outro exemplo que posso vir a usar:

http://localhost/DIRETORIO_DO_MEU_SITE/index.php?pagina=noticias&id=21516
Agora o que estou dizendo com esta linha acima?

Resp.: que estou incluindo a página noticias.php dentro da index.php, porém, esta noticias.php terá uma ligação com banco de dados que por sua vez puxará a notícia com id=21516, correto?

 

Mas também quero eliminar este jeito que estou usando e passar a usar:

http://localhost/DIRETORIO_DO_MEU_SITE/noticias/este-e-um-titulo-de-teste.html
Note que agora não estou puxando diretamente a id e sim o título da própria notícia.

 

Estas "coisas básicas" que estou explicando aqui já existem, só quero fazer no FORMATO URL AMIGÁVEL.

 

Sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O método do amigo acima é no minimo ineficaz (pelo menos no Apache,que possui a lib mod_rewrite).

Kimura...verifque se a mod_rewrite existe na diretória das libs do Apache.Verifique no httpd.conf se ela foi carregada.Se isso não acontecer,baixa-la e carrega-la.

Verifique ainda no httpd.conf,se o AllowOveride da sua document root está setado de 'forma que um arquivo .htacess seja interpretado'.Se estiver,escreva o seguinte em um arquivo de nome .htaccess,caso contrário no próprio httpd.conf:

RewriteEngine On
RewriteRule ^diretoria\/([a-z]+)(?:\/)?(.*)?$ diretoria/index.php?pagina=$1&id=$2

E resolvo vários tópicos relacionados a esse assunto quando vejo que o membro tentou e não conseguiu,só não resolvo onde o membro tem a chamada 'folga'.

Estudando um pouco sobre Expressões Regulares e lendo sobre a mod_rewrite,você o teria feito sem dificuldade.

 

Ps: no iss ou outros webservers que não tenham um recurso parecido ao mod_rewrite do apache você vai ter que dar um explode na Request_uri...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eibon,

 

Quero que você me explique o que esta regra abaixo EXATAMENTE faz:

RewriteRule ^diretoria\/([a-z]+)(?:\/)?(.*)?$ diretoria/index.php?pagina=$1&id=$2
Em cima da sua resposta, vou te dar outra que assim você vai entender o que estou falando desde a primeira postagem.

 

Sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você dizendo que esta sua regra só serve pra noticias.php que "puxa" uma id? Pra qualquer outra página que não seja noticia, não serve? É isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro que estude expressões regulares.

Sem mais.

 

Edit: to meio estressado...não repara.Vou te explicar a expressão regular.

() -> bloco de match
[a-z]+ -> caracteres minusculos de a até z com mais de uma ocorrência
?: -> supressor de bloco de match
? -> o bloco de match pode ou não existir...
.* -> qualquer caracter
\/ -> barra /

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua Regra serve ou não pra mais de um tipo de chamada de URL?

 

Notei que você faz referência à \diretoria

 

Sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retomando.

 

Fiz estas duas Regras:

RewriteRule ^([^/]*)$ index.php?pagina=$1 [L]
RewriteRule ^noticias/([^/]*)\.html$ index.php?pagina=$1 [L]

A primeira regra é para as páginas simplesmente incluidas (ex.: http://localhost/diretorio/contato)

 

A outra deverá ser uma regra só para as notícias.

 

Porém, a regra das notícias não está funcionando, não sei como obter a Url assim: http://localhost/diretorio/noticias/meu-titulo-da-noticia.html

 

Obs.: noticias também é um arquivo .php que está sendo incluído na index.php.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Calvin,

 

Sou obrigado a te dar os parabéns. Você conseguiu, exatamente, atingir e sanar a minha dúvida.

 

A sua explicação foi a mais sensata e perfeita. Obrigado mesmo.

 

Mas tenho que continuar tirando as minhas dúvidas. Minhas regras ficaram assim:

 

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/]*)$ index.php?pagina=$1 [L]
RewriteRule ^noticias/([0-9]+)/([a-z-A-z]+).html$ index.php?pagina=noticias&id=$1 [L]
Perguntas:

 

1º - É realmente necessário eu ter essas duas regras? Se não, como fazer uma única com estas condições acima?

 

2º - Segundo vários testes que fiz, a url ainda continua aceitando a chamada da página original (ex.: http://localhost/diretorio/contato.php), como bloquear esse acesso direto a qualquer arquivo, fazendo uma forma de redirecionamento?

 

3º - Se eu chamo uma página que não existe, ele não inclui nada (lógico), mas há alguma forma de redirecionar pra index?

 

São estas as minhas dúvidas, por enquanto.

 

Obrigado.

 

Sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Aprendiz CSS,

 

Se você estiver seguindo a minha estrutura, é quase isso que você deve chamar.

 

Ao invés do seu link atual:

<a href="http://www.meusite.com.com.br/index.php?pagina=minhaPagina&cod=10">Pagina 10</a>
Coloque assim:

<a href="http://www.meusite.com.com.br/minhaPagina/10/o-titulo-da-sua-materia.html">Pagina 10</a>

Lembrando, porém, que o que tenho (segunda regra) é uma constante chamada noticias. No seu caso seria minhaPagina.

 

Veja se serve pra você.

 

Sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou tentando colocar apenas para testar se meu servidor funciona as urls amigaveis e não esta encontrando a página

 

estou usando o wordpress para facilitar o teste

 

ele esta dentro da pasta blog do meu site.

 

onde eu faço o upload do meu arquivo .htaccess ??

 

ele foi gerado pelo wordpress

 

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /blog/

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /blog/index.php [L]

</IfModule>

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.