| Maior acervo de vídeo aulas da web

Não consegue visualizar a vídeo aula?

Modos de Trabalhar com URL Amigável com PHP

Salve Amigos do VAB. Como você já sabem, existem duas ótimas vídeo aulas sobre esse assunto aqui no VAB, do Leandro Davi e do Rafael Capucho, mas como esses ultimos dias respondi bastante duvida sobre esse assunto, também decidir fazer a minha contribuição, mostrando desde criar o .htaccess, até trabalha na parte do PHP ( creio que essa seja a maior duvida da maioria), para adaptar as suas necessidades e projetos. Espero que Gostem, e boa Aula.

Você gostou dessa Vídeo Aula, então compartilhe com seus amigos

Artigos Relacionados

Comentários

  • Erick

    Maravilha a aula!! sou seu fã!! =D

  • Junior

    David, muito obrigado. Agora eu posso dizer APRENDI.

  • Eder Gasparassi

    Excelente vídeo aula David.
    Tenho uma dúvida: Na variável “$permissao” você um array com o nome das páginas porque no seu projeto havia poucas páginas…mas se eu tivesse várias páginas? Como procederia?
    Se puder me responder a essa dúvida eu seria grato.
    Abraço.

    • http://www.videoaulasbrasil.com.br David CHC

      @Eder Gasparassi, vc pode continuar usando whitelist ( uma lista de permissão), mesmo com varias páginas. Para otimizar, vc pode fazer uma busca com glob, exemplo:


      $permissao = array();

      foreach(glob(“$pasta/*.php”) as $k){

      $file = str_replace(‘$pasta/”, ”, $k);
      $file = str_replace(‘.php”, ”,$file);

      $permissao[] = $file;
      }

  • http://www.amopernambuco.com.br Paulo

    Muito Bom!! ja fiz varias aulas, mais nunca aprendi o que realmente eu queria, agora vo assistir essa aula com mais calma e depois digo aqui se aprendi a fazer direitinho ou naum =D

    Vlw.!

  • http://www.matheusmoura.com Matheus Moura

    Boa a aula David, vlw!

  • Roberto Silva

    Valeu David !
    Eu segui o q vc escreveu no email e procurei como fazer isso e não entendi direito….. valeu mesmo !

  • http://www.krcomunicacao.com.br Tuco

    David, bela aula!

    Só que tem o seguinte…desculpe-me se sou muito xupetão, mas o código pro “glob” que vc postou tá dando erro…

    Eu seleciono apenas um $file = str_replace ou tenho que botar os dois mesmo?

    Se for os dois, tá dando erro!

    Abraços!

    • http://www.videoaulasbrasil.com.br David CHC

      @Tuco, não tá retornando algum resultado? No caso str_replace é apenas para remover o nome da pasta, e o .php, pra q fique apenas o nome. Veja no link se dá certo, eu troquei str_replace, po preg_replace pra trabalhar com expressão regular, ai fica apenas em uma linha, em vez de duas. OU poderia usar str_replace, usando um array

      Expressão Regular:

      http://www.pastebin.org/345190

      com Str_replace

      http://www.pastebin.org/345191

  • http://www.krcomunicacao.com.br Tuco

    Não rolo….rs….

    Tentei com os dois scripts que vc postou Compadre…ambos me retornam somente a página ERRO….

    Abraços!

  • http://www.krcomunicacao.com.br Tuco

    Funfou!! rs

    Seguinte…naquele primeiro script que vc postou, teve um lugar que veio, no meu “copiar+colar”, uma aspas duplas…e na real, são duas simples…ai rodei e funfou bonitinho….

    Abraços!

  • http://www.creatordesign.com.br Eduardo Valente

    Oi David, muito boa sua aula.

    Tem como você fazer um complemento para nós ensinando como deixar a url amigável com o nome de uma notícia ao invés do valor (id)?

  • Felipe Freitas

    No wordpress por exemplo ele pega id/21/banana/12 mesmo fora de ordem.
    ex seu eu colocar id/21/banana/12 ou banana/12/id/21 e eu mandar ele imprimir banana e id primeiro id depois banana ele imprime independente do link. como faz isso?

    • http://www.videoaulasbrasil.com.br David CHC

      @Felipe Freitas, wordpress ele mapeia URL, no caso tudo é feito no PHP. Outra coisa, ele grava a URL no banco de dados, quando vc gera uma página, a URL é gravada, logo fica mais facil identificar na hora de pesquisar no banco de dados. No caso, não há necessidade de vc mudar sempre a posição da URL, uma porque é ruim para o usuário, a segunda ruim para os buscadores, caso contrario dá conteudo duplicado. Sobre wordpress, a maneira de resgatar o link, vc tem q definir no proprio wordpress pra vc mapear a URL, e assim resgatar os valores.

  • Berg

    A melhor vídeoaula sobre url amig. !!!

    @DAVID CHC, nesses exemplos que você trouxe, vc muda uma url normal em php sem querystring para uma url amigável certo,

    vc colocou os arquivos em um único diretorio no primeiro exemplo. Em caso de ter mais subdiretorios, como ficaria essa url? chamaria sempre pelo nome do arquivo, como por exemplo, tenho uma pagina de videos.php e uma subpasta video com páginas cada uma com um vídeo, vou chama de autor.php, nesse caso seria:
    http://www.site.com.br/videos/autor

    ou tenho que adequar a um banco de dados?como seria nesse exemplo?

    outra pergunta é:
    devo trabalhar formatação css apenas na index.php e nas outras excluir tudo que não tiver dentro do ?
    e trabalhar sempre com o link completo?

    Agradeço desde já
    Berg.

    • http://www.videoaulasbrasil.com.br David CHC

      Obrigado @Berg.

      No caso, tente ver uma URL como um orientador nesse caso. No caso, vc está dizendo do exemplo direto, onde é apenas redirecionado o arquivo.Se tenho uma pasta videos, e nela um arquivo autor.php, no caso será essa url mesmo.

      http://www.site.com.br/videos/autor

      Onde autor será o arquivo autor.php. Nesse caso, apenas é é suprimida na URL .php, mas para o servidor ele continua, seria com vc tive chamando diretamente

      http://www.site.com.br/videos/autor.php

      Nesse caso, tem tomar cuidado , pq ele tem um acesso direto, e talvez trabalhar com banco de dados dessa maneira, pode dá trabalho. Então é melhor utilizar do estilo QueryString, onde vc consegue trabalhar melhor na hora de tratar essa URL, e definir que parte fica responsavel por cada item. Exemplo, se a primeira parte é o arquivo, e a segunda é o parametro, se tiver fazendo uma pesquisa no banco de dados.

      Sobre a segunda duvida. Se vc estiver trabalhando no estilo Query String, com terá apenas 1 ponto de entrada, logo o CSS , Javascript será colocado no index.php q será responsavel por receber essa URL, e decidir qual o arquivo incluir.

      Quando vc trabalha com esse modelo de Query String, os arquivos q são incluidos, não precisam de cabeçalho , css, e outras coisas. Ele é apenas o conteudo, claro, q terá suas divisões, cm divs, etc, de acordo com seu layout.

      Sobre o link completo,é verdade, quando vc for trabalhar com URL Amigavel, os seus links terão q ser completos. Vc pode pra facilitar, criar um arquivo php, chamado define.php, onde vc coloca um constante:

      define(“URL”, ‘http://www.seusite.com.br‘);

      E na hora de montar o link vc só precisa chama a constante URL

      < ?php echo URL ?>.’/quem-somos/’

      Isso vai facilitar, pq vc ao colocar no seu servidor, só vai mudar o arquivo define.php, no caso o endereço da URL. Isso vai se aplicar a todas as solicitação de arquivo, exemplo, chamar CSS, Javascript, Imagem, Flash, todos os caminhos terão que ser completos, e dessa maneira vai facilitar bastante.

  • Berg

    com relação a minha segunda pergunta, tudo esclarecido, e a dica do define muito boa.

    fiz uns testes sobre a questão da subpasta videos e não esta funcionando nem no esquema http://site.com.br/videos/autor nem com a extensão .php,
    deve ser pq estou usando sua aula sem nenhuma modificação.

    Trazendo para o exemplo da videoaula só para não se ter dúvidas:
    http://www.site.com.br/produtos/autor

    onde produtos é o nome do primeiro arquivo incluso na index e autor é o arquivo que esta dentro de uma subpasta (arquivos/”videos”/), há alguma coisa errada nessa lógica?
    ou questão de permissão no codigo php da index ou ainda mais, cabe se trabalhar com outra expressão regular no .htaccess?

    • http://www.videoaulasbrasil.com.br David CHC

      @Berg, entendi a situação. No caso, não seria um acesso direito, e sim uma inclusão dentro de uma inclusão, exemplo:

      http://www.site.com.br/produtos/autor

      $pagina = $url[0]; //produtos
      $subsecao = $url[1]; //autor

      Então, dentro da pagina produtos.php, seria a inclusão dessa subsecao

      produtos.php


      $pastaVideo = ‘videos’;

      if(isset($subsecao) && file_exists(“$pastaVideo/$subsecao.php”)){
      require_once(“$pastaVideo/$subsecao.php”);
      }

      No seu caso , creio que vc tem essa estrutura ( onde tem a barra é uma pasta):

      – arquivos/
      —> videos/
      ——–> autor.php
      —> audios/
      ——–> audios.php

      Talvez para vc, seria melhor q o primeiro parametro seja o nome da subpasta (video), e terceiro seja o nome do arquivo.

      E se no caso, tenha apenas 1 parametro, então ele será o arquivo. seria algo assim ( coloquei no pastebin para melhor visualizar):

      http://pastebin.com/hJG2s5Q3

  • Berg

    @DAVID CHC

    dessa vez funcionou, coloquei o código que vc postou no pastebin, e o que aconteceu, para o arquivo aparecer a url seguiu mostrando primeiro o nome da subpasta e em seguida só o nome do arquivo, explanando:

    tem lá http://www.site.com.br/produtos/ (primeiro arquivo incluso na index)/, nele coloquei os links dos arquivos da subpasta. Os links funcionaram, a url ficou assim: http://www.site.com.br/(nome da subpasta)/(nome do arquivo)

    eu pensava que ficaria sempre mostrando o nome dos arquivos como:
    http://www.site.com.br/“produtos”/(nome do arquivo da subpasta)

    percebi que ao clicar no link da subpasta que se encontra na página produtos o arquivo não abre dentro da página produto e sim na index.

    quaquer coisa se estiver confuso o que digo te passo os arquivos pra vc analisar,

    obrigado pela atenção.

    • http://www.videoaulasbrasil.com.br David CHC

      @Berg, pelo q entendi, de acordo com sua estrutura de pasta, creio que seja um solução interessante. Claro, essa é uma maneira de fazer, existem varias outras. Foi uma sugestão, mas vc pode tentar testar, onde o primeiro parametro seja sempre arquivo, e dentro desse arquivo chame as ações q deseja (outro arquivo dentro da pasta), e já nesse arquivo vc defina pasta para onde vai chamar.

  • Berg

    @DAVID CHC

    realmente, há n maneiras de se usar, como estou compreendendo agora a função das urls amigs e como usalas, vou sem dúvidas ler mais sobre o assunto e estudar suas várias situações de uso,

    fico com sua dica como exercício de casa,
    valeu mesmo.

  • Paulo

    Salve Davi, sempre quis aprender a utilizar .htacess, mas sempre achei muito complicado, mas com esse vídeo ficou tudo muito fácil. Parabens.

    • http://www.videoaulasbrasil.com.br David CHC

      Obrigado @Paulo

  • Juan Lima

    Fala David, Ótima video aula, só que to com uma dúvida aqui.

    Bom, eu fiz e deu tudo certinho uso o link http://site.com/categorias/48 e ele mostra os links da categoria certinho, mas ai que está o problema nas categorias da outro link pra subcategorias, sem usar a url amigavel o link é http://site.com/mostrar.php?cat=48&subcat=323, ai ele abre certinho mas na url amigavel ele nao abre, no .htaccess coloquei:
    RewriteRule ^mostrar/(.*)$ mostrar.php?cat=$1&subcat=$2

    ai ele não aparece, mas quando ali aonde fica o $2 se eu coloco direto a id da subcategoria a pagina abre normal quando eu uso o rewrite, percebi que qdo eu digito la http://site.com/mostrar/48/ mesmo com o id da subcategoria “fixo” no .htaccess a pagina nao abre, acho que deve ser porque o php deve ta interpretando mostrar.php?cat=48/&subcat=336, tem como eu tirar essa barra, se o problema for nisso que estou suspeitando ?!

    desculpa se nao fui mto claro..

    abçs

    e parabens pelas dicas…

    • http://www.videoaulasbrasil.com.br David CHC

      No caso vc vai ter q mudar no .htaccess

      RewriteRule ^mostrar\/(.*)\/(.*)$ mostrar.php?cat=$1&subcat=$2

      Agora está subdividido, no qual vc consegue pegar o $_GET['cat'] e o $_GET['subcat']

  • Juan Lima

    Opa agora funcionou certinho

    vlw kra

  • http://www.bobrinha.com Ronaldo Aires

    Olá, parabens pelo tutorial muito bom, mais estou começando em php e estou com dificuldades, bom vamos la eu criei uma pagina .htaccess na raiz com o codigo

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ categorias.php?id_categoria=$1

    tenho uma pagina chamada categorias.php onde pego as categorias assim $id_categoria = protecao($_GET['id_categoria']);

    mais como coloca o codigo pra ficar categorias/2 não da certo :(

    • http://www.videoaulasbrasil.com.br David CHC

      @Ronaldo , nesse caso, vc quer algo especifico, no caso quando digitar categorias, então seu htascess tem q ser assim


      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^categorias/(.*)$ categorias.php?id_categoria=$1

      Repare q indico na regra, com o sinal circunflexo, q tem q começar com categorias. Então quando alguém digitar categorias/2, o valor 2 será do id_categorias.

  • http://www.emminutos.com Michel

    david

    eu fiz do jeito de video,mas só aparece index.php não aparece produtos/12

    o que pode ser

    • http://www.videoaulasbrasil.com.br David CHC

      @Michel, quando vc digita na url produtos/12, vc não consegue recuperar esse valor ?

  • http://www.emminutos.com Michel

    isso

  • Jonas

    otimo video fiz td certo mas
    David aqui so fica indo pra pagina de erro oq faço ? >>> =(

    • http://www.videoaulasbrasil.com.br David CHC

      @Jonas, no caso não está passando pela validação, coloca o script q vc criou no http://www.pastebin.com, escolha a linguagem PHP, e me manda o link pra dá uma olhada.

  • Jonas

    David esta aqui oquê você me pediu

    Minha index.php onde esta o codigo que você ensinou
    http://pastebin.com/YniPncPW

    Minha Querystring é feita assim
    http://pastebin.com/8Kccsbkt

    • http://www.videoaulasbrasil.com.br David CHC

      @Jonas, aparentemente o codigo está normal, então vamos tentar entender o q só aparece erro. A primeiro coisa é tentar ver o q está retornando $_GET['pg'], no caso na variavel $atual, então imprima esse valor :


      $atual = (isset($_GET['pg'])) ? $_GET['pg'] : ‘home’;
      echo $atual;

      Veja se retorna o valor $_GET['pg'] normalmente. No caso acesse os links, pra verificar os valores retornados.

      Se está retornando normalmente, vamos verificar, se está retornando quando damos o explode:


      if(substr_count($atual, ‘/’) > 0){
      $atual = explode(‘/’, $atual);
      echo $atual[0];
      }

      Veja se está retornando o nome da pagina q vc quer acessar.

  • Jonas

    David fiz o procedimento,
    Sim ele me retorna o valor quando coloco sobre na URL ele retorna Sobre/
    mas ele nao retorna o conteúdo que tem na pagina sobre.php la na pasta ‘ Pages’

    nao sei se tem haver com a minha Query string estou muito confuso.

    Coloquei
    if(substr_count($atual, ‘/’) > 0){
    $atual = explode(‘/’, $atual);
    echo $atual[0];
    }

    ele me apresenta outro erro agora
    http://i36.tinypic.com/2n6zwug.jpg

    • http://www.videoaulasbrasil.com.br David CHC

      @Jonas, no caso , vc está usando a Query String, e o codigo q ensinei? No caso, terá q usar apenas um dos 2. O Erro, está dizendo em relação a a variavel $atual, no caso, vc só colocou essa parte do codigo, o restante anted dele não colocou?


      $atual = (isset($_GET['pg'])) ? $_GET['pg'] : ‘home’;
      if(substr_count($atual, ‘/’) > 0){
      $atual = explode(‘/’, $atual);
      echo $atual[0];
      }

  • Jonas

    David desculpa te encomodar mais cara nao quero ser muito chato.

    tipo
    Sim coloquei, e não me exibe o conteúdo que está no arquivo por exemplo “sobre.php” ele so me retorna isso na dela: sobre/ mas nao retorna o conteudo q tem dentro no arquivo la sobre.php falando do site etc etc .

    sim o site ja era existente usando Querystring .

    • http://www.videoaulasbrasil.com.br David CHC

      @Jonas, não tem problema, vamos tentar chegar a um solução:


      $atual = (isset($_GET['pg'])) ? $_GET['pg'] : ‘home’;
      if(substr_count($atual, ‘/’) > 0){
      $atual = explode(‘/’, $atual);
      echo $atual[0];
      }

      Veja q nesse caso, eu quero q quando vc fori acessar, sobre/, ele tem q imprimir apenas a palavra sobre, sem o barra, ele está fazendo isso?

  • Jonas

    Sim david está!
    So me retornando a palavra sobre

    • http://www.videoaulasbrasil.com.br David CHC

      @Jonas, então sabemos q está retornando o valor do arquivo q queremos,vamos agora proseguir. Dando uma olhada nos seus arquivos, creio q encontrei o erro, está na hora de verificar se o arquivo existir:

      $pg = (file_exists(“($pasta}/”.$atual[0].’.php’) && in_array($atual[0], $permissao)) ? $atual[0] : ‘erro’;

      Repare q vc tá colocando um sinal de parenteses, em vez de chaves :
      $pg = (file_exists(“{$pasta}/”.$atual[0].’.php’) && in_array($atual[0], $permissao)) ? $atual[0] : ‘erro’;

      Então, modifique seu código assim:

      http://pastebin.com/TnkmAEmW

      Veja se agora ele funciona.

  • Jonas

    David!!! Você é 10 cara! Sucesso cara, deu certo, exatamente oquê vc falou, agora esta funcionando muito obrigado!!!

    Ta 100% agora!

    Tenho so uma duvidazinha agora, nos links que direcionam as paginas ex: Sobre
    deixa exatamente assim ou é de outra maneira?

    Muito obrigado novamente pela paciencia de me explicar e pela ajuda!

  • Jonas

    Valeu deu certo!!! agora ta 200% o sisteminha!
    Obrigado pela paciencia
    fica com deus ! Abraço

    • http://www.videoaulasbrasil.com.br David CHC

      @Jonas, q bom conseguimos resolver o problemas. abrs

  • http://www.etjrsonline.net Anderson

    Olá David Boa Tarde! Como faço que o usuario nao acesse uma determinar pasta pelo navegador. exemplo http://www.meusite.com.br/site/ sabendo que nesta pasta nao consta nenhum index

    • http://www.videoaulasbrasil.com.br David CHC

      @Anderson, vc pode colocar um instrução no .htaccess

      RewriteRule ^restrito\/(.*)$ index.php

      Nessa instrução, ele se tiver na URL restrito, exemplo:

      http://www.seusite.com.br/restrito/

      Ele será redirecionado para index.php, não permitindo o acesso a esta pasta restrito

  • http://twitter.com/raimofelipe Felipe Raimo

    SHOW DE BOLA!
    MUITO BOM!
    OBRIGADO!

  • http://twitter.com/raimofelipe Felipe Raimo

    Davis, sensacional a video aula,
    devo estar com o mesmo probleminha de alguns colegas aqui:
    Só me retorna o erro em qqr situação, oque pode estar ocorrendo!?

    Grande abraço!

  • Eliabe

    muito boa a vídeo aula mais tipo como eu faço pra url desse tipo
    http://www.site.com.br/noticia.php?id=50
    ficar assim
    http://www.site.com.br/noticia/50

    • http://www.videoaulasbrasil.com.br David CHC

      @Felipe Raimo, veja o nome da pasta se é a mesma q informei na video aula. No caso, se está aparecendo apenas a página erro, é pq não está passando pela validação, no caso de verificar se o arquivo existe ou não.

      @Eliabe, na propria video aula eu mostro uma maneira de fazer isso. No primeiro parametro será o nome da pagina, e o segundo paramento vc resgata o ID. Tenho o id, vc pode fazer a pesquisa na página q foi incluido, no caso noticia.


      $pagina = $url[0];
      $id = intval($url[1]);

  • http://twitter.com/raimofelipe Felipe Raimo

    David, mais uma vez obrigado pela aula, muito boa, funciona mesmo, como havia dito a pouco sobre o ‘erro’ resolvi trocando todas as aspas simples, por aspas duplas, não sei pq, mas funcionou certinho a partir disso! Gostaria de saber se isso tem haver com versões de php, EasyPHP essas coisas?

    Grande abraço e parabéns pelas soluções!

    • http://www.videoaulasbrasil.com.br David CHC

      @Felipe, primeira interessante entender a diferente entre aspas simples e duplas.

      As aspas simples ele verá o conteudo como uma string, mesmo que coloque uma variavel entre aspas simples, para o PHP vc tá escrever um valor literal, exemplo:


      $nome = ‘Felipe Raimo’;
      echo ‘Meu nome é $nome’;

      Vai mostrar isso no navegador:

      Meu nome é $nome;

      Veja, que ele não interpretou a variavel $nome, atribuindo o seu nome da hora de mostrar. Isso pq coloquei tudo em aspas simples, mas seu colocasse entre aspas duplas:


      $nome = ‘Felipe Raimo’;
      echo “Meu nome é $nome”;

      Vai mostrar isso no navegador:

      Meu nome é Felipe Raimo;

      Agora sim, ele vai se comportar como eu queria, mostrando o seu nome. Então quando tem aspas duplas, o php vai procurar por variaveis e tentar interpretar, com aspas simples ele vai entender q vc quer passar apenas uma string literal, sem necessidade de interpretar o conteudo.

      Talvez seje por isso q tava mostrando a palavra erro, pq não estava interpretando o conteudo da variavel ou do valor q vc queria passar.

  • Eliabe

    DAVID CHC : conseguir agora é que eu tinha esquecido de botar a variável id
    no codio gerado pelo Dreamweaver
    $query_rsnoti = sprintf(“SELECT * FROM
    noticia WHERE id = $id “, antes tava o %s

  • Marcelo Augusto

    Show de bola essa video aulas, ja vi outras video aulas com mesmo tema, mais tão compicadas na net, pois essa video aula e bem simples e de facil entendimento.

    Obrigado

    • http://www.videoaulasbrasil.com.br David CHC

      Q bom @Marcelo, q aula pode te ajudar entender mais sobre URL Amigavel.

  • Marcelo Augusto

    DAVID amigo, vi ai que vc respondeu as duvidas de varios usuarios, pois tbm estou com uma duvida, se não for abusar da sua boa vontade, quero ver se pode me ajudar, A duvida e a seguinte.

    fiz tudo que vc fez la na VA configurei o htaccess tudo certinho, e se eu coloco na url assim
    http://localhost/site/saida
    ok, da tudo certo da include na pagina saida.php

    porem se eu coloco a url assim
    http://localhost/site/saida/
    com a / no final, ai não da certo, a pagina index fica toda desconfigurada e não da include.

    pode me ajudar nisso? valeo abrasss

    • http://www.videoaulasbrasil.com.br David CHC

      @Marcelo, então, sobre a desconfiguração da pagina. Vc tem colocar a URL completa em qualquer requisição, exemplo:

      img src=”imagens.jpg”

      Com URL amigavel, vc terá q fazer assim:

      img src=”http://localhost/site/imagens.jpg”

      Isso vale para CSS, flash, imagem, javascript.

      Sobre a parte de não dá include, me mostra o script q vc tá usado. Coloque no site http://www.pastebin.com, e depois coloque o link pra eu dá uma olhada.

  • Marcelo Augusto

    DAVID amigo, valeo cara, era isso mesmo, deu certo até no require/include.
    Foi só colocar a URL completa como você disse e deu tudo certo.

    Obrigado pela atenção.
    Bom domingo.

  • http://www.clgames.com.br WilliamF

    Olá, amigo David mas usando as URL’s amigáveis encontrei um pequeno problema. quando eu vou a URL e digito algo como ../../ ele começa a voltar os diretórios. é isso pra um hack é uma maravilha, teria alguma forma de corrigir isso??

  • http://www.clgames.com.br WilliamF

    Desculpe o flood, acabei lembrando de outra coisa somente agora.

    Ex eu queria poder fazer com que a URL ficasse dessa:

    http://site.com/index.php?p=produtos&camiseta=preta&id=15

    em algo assim

    http://site.com/produtos/camiseta/preta/15

    pois utilizo um site q requer url’s no mínimo assim até bem mais recheadas de informações e complexas, existiria algum modo de faze-lo??

    Att.WilliamF CLGames.
    PortoAlegre, 4 de Janeiro de 2011,

    • http://www.videoaulasbrasil.com.br David CHC

      @WilliamF, vc consegue acessar assim, voltando diretorios, pq vc não tá na pasta raiz, na hospedagem a pessoa não vai conseguir acessar.

      William, todo o conteudo está dentro da variavel $_GET['pg'], vc pode formatá-la com qualquer informação. NO caso a informação mais importante para vc é o ID, então vc terá fazer a logica para apenas resgatar esse valor. Antes de construir, defina como será o comportamento das suas URL, se serão puxando no banco de dados, ou se serão arquivo incluidos, e a partir dai vc consegue criar um script q te atenda.

  • http://www.clgames.com.br WilliamF

    Caro David, compreendi o que vc quis me dizer mas só que:
    1 – Eu Utilizo PDO MSSQL, que ainda n encontrei nenhuma hospedagem que ofereça um suporte ao mesmo, as que tentei liberar eram linux, mas Linux não ta rodando o MSSQL só MYSQL, por isso utilizo o site em meu servidor dedicado em meu apache, fica complicado, mas pelo que intendi se eu colocar o site na raiz dentro da www ele não volta nenhuma pasta correto? e quanto ao ID acho q da pra fzer uma classe. Um amigo meu fez uma classe que manipula Url’s Amigáveis Veja:
    http://pastebin.com/eDt3nCui
    tem outro arquivo que manipula as permissões funciona da seguinte maneira:

    array(
    “/” => “home.php”
    )
    ));

    ?>

    ai eu ja vi ele usando expressões regulares dentro deste arquivo de permissões e funciona muito bem. Teria como dar uma explicação meio por cima dessa classe ? Eu n intendi mt e o autor dela n consigo contato com ele a algum tempo.
    Agradeço desde-já

    Att.WilliamF CLGames.
    PortoAlegre, 4 de Janeiro de 2011

    • http://www.videoaulasbrasil.com.br David CHC

      @WilliamF, vc pode fazer um teste, entre no localhost, e tente fazer isso.

      Sobre o Banco de Dados, nunca usei o SQL Server, mas se vc acha q ele se comporta melhor q o mysql, vai de cada um.

      Pelo q vi rapido nessa classe ela pela a URL, retira no nome da parte raiz, q seria o nome do site (http://www.seusite.com.br), deixando apenas o q vem depois. As expressão regulares é apenas para garantir q terão apenas valores de a até z. Creio q tbm colocou opção de paginação, onde está o metodo url. Provavelmente tem mais coisas pra trabalhar com essa classe.

      Uma maneira q acho mais facil, q o proprio WordPress faz, é guardar a URL no banco de dados, assim o q vc vai fazer é apenas fazer a busca por essa url pra o produto especifico.

  • http://saviola.com.br Sávio Resende

    Olá David, gostaria de saber se url amigável interfere em includes que faço na página (como chamar o arquivo de conexão com o banco em outra pasta) sem ler a pasta como variável, e se interferir, como evitar.

    • http://www.videoaulasbrasil.com.br David CHC

      @Sávio , ela não interferi com os includes, pode usar sem problema

  • Victor

    Tem algum jeite de criar uma url amigável com javascript ?

  • Itallo

    David, estou com um problema faço tudo certo, mas quando boto na urr, ex:
    site.com/perfil não vai dar error not found 404.. mais quando boto perfil.html ou perfil.php da certinho.. quero que acesse só botando o /pefil..

    olha o código ai:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\.html$ $1\.php

    Abraço.

    • http://www.videoaulasbrasil.com.br David CHC

      @Itallo, vc tá especificando que tem q terminar .html, isso que significa o cifrão na expressão regular

  • Leandro Pedrosa

    Parabéns pela aula David, eu tenho uma dúvida…
    Eu tenho o arq .htaccess na pasta raiz, mas tem um diretório chamado “br”, e estou querendo implementar a url amigável nesta pasta, eu coloquei assim no htaccesss:

    RewriteRule br/^(.*)$ index.php?pg=$1

    mas quando digito: localhost/site/br/home ou qualquer outra coisa, ele dá a seguinte mensagem de erro:

    The requested URL /site/br/home was not found on this server.

    E os arquivos home.php, erro.php estão dentro da pasta “br”.

    O que pode ser?

    • http://davidchc.wordpress.com David CHC

      Leandro, você vai colocar o htaccess dentro da pasta br. Caso vc queria que seja redirecionado para basta br, teria que ser assim

      RewriteRule ^br/(.*)$ br/index.php?pg=$1

      Está dizendo, se tiver br, ele será redirecionado para o arquivo index.php, que está dentro da pasta br.

      • Leandro Pedrosa

        Muito Obrigado. Deu certo. Agora tá baum passado

  • Felipe Sobral

    David, excelente vídeo aula cara… conseguiu resolver meu problema em 99.9%
    apenas uma dúvida. minha antiga URL era 

    localhost/site/index.php?file=lista&id_grupo=99

    agora está assim 

    localhost/site/lista   até aí ok, página perfeita, porem sem o ID da consulta

    mas quando eu boto o lista/99  nao está vindo o css da página…

    ele aceita o ID passado, faz a consulta no BD, retorna o resultado… tudo ok

    mas a página perde o CSS.

    Sabe o que poderia ser isso?

  • http://davidchc.wordpress.com David CHC

    Você vai retirar o # dessa linha:

    LoadModule rewrite_module modules/mod_rewrite.so

    E onde tem AllowOverride None colocar para AllowOverride All

  • http://davidchc.wordpress.com David CHC

    Pelo q vi, vc está definindo para pegar 2 itens, mas está tentando passar 3.

    RewriteRule ^perfil_editar/(.*)/(.*)/([0-9]+)/?$ br/index.php?pg=$1&id=$3&nome=$2

    Agora o 1 item será a pagina, o segundo o nome, e o terceiro o ID

  • Peter Flister

    Preciso de ajuda urgente !

    Bom, meu website possui conexao com mssql.
    A url normal é da seguinte forma: 127.0.0.1/index.php?pagina=charinfo&nome=Peter

    Como faço para deixar: 127.0.0.1/charinfo/nome/Peter ?

    Já tentei de tudo, mas não consegui.
    Se alguém puder me ajudar, eu agradeço.

    Muito Obrigado.

    • http://davidchc.wordpress.com David CHC

      Não seria melhor assim:

      127.0.0.1/charinfo/Peter

      Basta criar a regra algo assim:

      RewriteRule ^(.*)/(.*)$ index.php?pagina=$1&nome=$2

      Vc vai recuperar da mesma maneira com $_GET['pagina'] e $_GET['nome']

  • Antony

    Boas, Adorei a aula…
    mas…
    como meu amigo Michel ele não funciona no servidor.

    Posso digitar produto/12
    e ele me retorna no echo apenas index.php
    Independente do que escrever.
    :/

    agulma ideia do que seja?

    • http://davidchc.wordpress.com David CHC

      Antony, seu servidor é Apache ou IIS ?

  • http://davidchc.wordpress.com David CHC

    Então Giovanni, a condição ternaria é a mesa coisa que a função if em bloco, exemplo:

    $valor = 1;
    if($valor == 1){
    echo ‘É igual a 1′;
    }else{
    echo ‘É diferente de 1′;
    }

    Agora em condição ternária

    echo ($valor == 1) ? ‘É igual a 1′ : ‘É diferente de 1′;

  • http://davidchc.wordpress.com David CHC

    Em que parte vc não está entendendo? Na criação do htaccess, na recuperação dos valores via GET ?

  • Anônimo

    Davi me da uma mão ai meu Rei , a url ta funcionando blz , porem hora que eu coloco o id ele não carrega o css !!! porem no digo fonte ta certinho. o que pode ser 

    • http://davidchc.wordpress.com David CHC

      Basta colocar o caminho completo para o CSS, :

      URL_COMPLETA / css/style.css

      • Anônimo

        Obrigado vlw mesmo

  • Pmairon1

    Davi, grande tutorial, parabéns. Gostaria de tirar uma dívida.

    Existe algum meio de programar no .htaccess?

    Tenho a seguinte situação: 

    pag 1)index.phppag 2)pesquisa.php
    pag 3)produto.phppag 4)site.php?pag=abc

    estou criando um site que terá meio que um subsite. Quando o usuário acessar http://www.meusite.com, ele será redirecionado para index. Até aí tudo perfeito. Caso acesse http://www.meusite.com/pesquisa, ele vai para pesquisa.php, assim por diante. Agora se a pessoa digitar http://www.meusite.com/abc  ou qualquer outro complemento depois da barra, que não seja pesquisa ou produto,  a pessoa teria que ser redirecionada para http://www.meusite.com/site.php?pag=complemento 

    Por isso perguntei se tem como programar no .htaccess. Se tiver como eu fazer uma condiçao por exemplo

     if((complemento !=pesquisa) ||(complemento !=produto)){  
              redireciona para http://www.meusite.com/complento

       }
    Obrigado pela ajuda!

    • http://davidchc.wordpress.com David CHC

      Vc pode fazer pelo htaccess sim, tente fazer assim :

      RewriteRule ^!(pesquisa|produto)$ site.php?pag=complemento

  • http://davidchc.wordpress.com David CHC

    Leornado, vc terá q mudar manualmente. O q o htaccess é mascara a URL para o servidor, mas maneira de enviar, no caso na montagem do link, vc terá q mudar manualmente

  • http://davidchc.wordpress.com David CHC

    Leornado, vc entendeu o funcionamento na vídeo aula do htaccess ?

  • http://davidchc.wordpress.com David CHC

    Leornado, isso não está relacionado a URL Amigavel, vc vai utilizar da mesma maneira se não tivesse usando url amigavel. Veja essa sequencia de video aulas q poderá te ajudar:

    http://www.videoaulasbrasil.com.br/php/criando-sistema-de-login-com-session-%E2%80%93-parte-01/

  • http://davidchc.wordpress.com David CHC

    Basta colocar o caminho completo para as imagens, css, js

    • Rogério Bonfim

      Mais uma Duvida e os Titulos da página como eu poderia inseri-los de maneira correta tipo os pegando atraves de um banco de dados?

      • http://davidchc.wordpress.com David CHC

        A maneira mais facil, é em vez de inserir apenas o conteudo, inserir a pagina inteira. Essa pagina inteira vc fatiar com header.php, footer.php, assim:

        index.php

        //Aqui faria a pesquisa a atribuiria ao header o valor

        chama => header.php

        chama => footer.php

  • Bruno Henrique Cury

    David CHC boa noite, por favor me ajude nesta situação:
    Minha estrutura de diretórios esta assim:
    index.php
    /php
    /php/ambientes

    Com as regras que você nos ensinou:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$     php/index.php?pg=$1 (precisei colocar o php/ antes pois se não, não funciona aqui comigo)

    Está funcionando certinho todas as páginas do diretório /php
    index.php?pg=php//home retornando http://www.dominio.com.br/home

    Mas a minha dificuldade está em tratar as páginas do subdiretório /php/ambientes do qual chamo assim:
    index.php?pg=php/ambientes/cozinha

    Preciso que a reescrita seja:
    http://www.dominio.com.br/ambientes/cozinha

    Já tentei de tudo, mas infelizmente ainda não estou conseguindo esta faceta.

    teria a solução para este grande problema?  Poderia me ajudar também na questão de como eu vou chamar pelo “a href” esta página?

    A minha outra pergunta é se a sua regra vale para qualquer subdiretório abaixo do /php?

    Obrigado desde já.

  • Adriano-jesus

    Amigo gostei muito da vídeo aula mas estou com um pequeno problema…

    Eu criei o arquivo .htaccess 
    e quando fui testa para ver se estava tudo ok apareceu o seguinte erro “400
    Bad Request” gostaria de saber como faço para corrigir…

    Obrigado pela atenção!!!

    • http://davidchc.wordpress.com David CHC

      Vc habitou o modo rewrite no apache ?

  • Pingback: Como trabalhar com URL amigáveis em PHP » Márcio Brasil

  • Marcioappi

    Caro David, parabéns por mais essa excelente video aula. Sei que a mesma já foi postada a algum tempo, mas estou com uma dúvida. Os links da aplicação também terão de usar o endereço completo do que pretendem acessar, para evitar que seja acessado um endereço mais o último que foi visitado?

    • http://davidchc.wordpress.com David CHC

      Vc colocará a URL completa para os arquivos externos, como css, js, imagem etc

  • http://davidchc.wordpress.com David CHC

    vc tem q colocar a URL completa para os menus,e itens externos, como imagem, css, js, swf etc

    • Ademir

      OK, funcionou perfeitamente

      Grande abraço…

  • Ademir

    Olá David,

    no seu exemplo você colocou a variavel $id , no meu caso são variaos ID ,

    $id_tec , $id_user etc, terei que colocar todos os id na função criada ?

    Ademir

    • http://davidchc.wordpress.com David CHC

      Esse ID vão passar juntos : id_tec=2&id_user=1 ?

  • Samuelgnr

    Olá David,
    Muito boa a Vídeo Aula.
    Funcionou direitinho na query string.
    Exceto, quando passo um parâmetro a mais no caso produtos/1
    dá o Erro: Warning: require(arquivos/Array.php) [function.require]: failed to open stream: No such file or directory in C:wampwwwurlindex.php on line 29

    • http://davidchc.wordpress.com David CHC

      Está passando a palavra Array, vc tem passar o elemento do array

      $atual[0] => será a pagina
      $atual[1] => o ID

  • http://davidchc.wordpress.com David CHC

    Primeiro vc tem q definir como vai recuperar o valor da pagina. Vamos dizer q o link será assim:

    seusite.com.br/produto/page:2

    Exemplo de código pra recuperar o valor 2

    http://pastebin.com/g0wxUUDe

    Na hora da paginação, pasta vc chamar a função getPage() pra saber o valor da paginação.

    Lembrando q não vai relacionado a sua função em si

  • http://davidchc.wordpress.com David CHC

    Coloca no http://www.pastebin.com, e manda o link, pq aqui não apareceu.


Hospedado por Hostnet - Hospedagem de sites

VAB - Todos os direitos reservados - 2008 / 2012

Developed by: MX Web Studio

Mais em PHP (152 of 199 articles)