Kimura 0 Denunciar post Postado Maio 6, 2009 Como posso fazer Urls Amigáveis para estes tipos hipotéticos de situações: http://localhost/DIRETORIO_DO_MEU_SITE/index.php?pagina=contato http://localhost/DIRETORIO_DO_MEU_SITE/index.php?pagina=qualquercoisa http://localhost/DIRETORIO_DO_MEU_SITE/index.php?pagina=noticias&id=21516 http://localhost/DIRETORIO_DO_MEU_SITE/index.php?pagina=noticias&id=1216Uma saída amigável pros exemplos acima seria assim: http://localhost/DIRETORIO_DO_MEU_SITE/contato.html http://localhost/DIRETORIO_DO_MEU_SITE/qualquercoisa.html http://localhost/DIRETORIO_DO_MEU_SITE/noticias/este-e-um-titulo-de-teste.html http://localhost/DIRETORIO_DO_MEU_SITE/noticias/outro-titulo-qualquer.htmlComo fazer? Obs.: Não encontrei tutoriais sanando minhas dúvidas. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
redenoos 0 Denunciar post Postado Maio 6, 2009 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
Kimura 0 Denunciar post Postado Maio 6, 2009 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
_Piero 0 Denunciar post Postado Maio 6, 2009 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 offe pronto, vai dar pra acessar normalmente. é isso ai, espero ter ajudado! :0 Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Maio 7, 2009 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=contatoO 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/contatocom 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=21516Agora 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.htmlNote 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
eibon 2 Denunciar post Postado Maio 7, 2009 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
_Piero 0 Denunciar post Postado Maio 7, 2009 Entendi, bom cara, se você for usar dessa forma, da uma lida aqui: http://brunotorres.net/urls E se sobrar tempo estuda um pouco de expressoes regulares que você fixa bem o conteudo ^^ Flww Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Maio 7, 2009 eibon, Quero que você me explique o que esta regra abaixo EXATAMENTE faz: RewriteRule ^diretoria\/([a-z]+)(?:\/)?(.*)?$ diretoria/index.php?pagina=$1&id=$2Em 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
eibon 2 Denunciar post Postado Maio 7, 2009 http://seusite/diretoria/noticias/seilaoq.seilaoq -> httpd://seusite/diretoria/index.php?pagina=noticias&id=seilaoq.seilaoq Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Maio 7, 2009 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
eibon 2 Denunciar post Postado Maio 7, 2009 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
Kimura 0 Denunciar post Postado Maio 7, 2009 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
eibon 2 Denunciar post Postado Maio 7, 2009 Diretória é constante.O formato da sua url teria que ser. http://seusite/diretoria/([a-z]+)/(.*)'>http://seusite/diretoria/([a-z]+)/(.*) Ou: http://seusite/diretoria/([a-z]+) Mas isso com um pouco de estudo sobre expressões regulares você muda. Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Maio 7, 2009 Amanhã volto a postar, farei testes. Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Maio 7, 2009 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
Kimura 0 Denunciar post Postado Maio 8, 2009 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
Aprendiz CSS 3 Denunciar post Postado Maio 8, 2009 nos links eu chamo a página dessa forma <a href="http://www.meusite.com.com.br/index.php?pagina=minhaPagina&cod=10">Pagina 10</a> é dessa forma mesmo? esta correto? Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Maio 8, 2009 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
Aprendiz CSS 3 Denunciar post Postado Maio 8, 2009 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 Citar <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
Aprendiz CSS 3 Denunciar post Postado Maio 11, 2009 deu certo galera! obrigado Compartilhar este post Link para o post Compartilhar em outros sites