Jump to content


Photo

Rewrite Url Funcional...


  • Faça o login para participar
4 replies to this topic

#1 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 01/02/2009, 17:22

Sou novato total nesse lance de rewrite url... comecei a dois dias... :assobio:
Queria saber de quem já conhece se esta forma que fiz é eficiente e segura...

Tentei e consegui de várias maneiras postadas na internet, entendi como funciona... mas gostei muito dessa forma que descreverei, porque posso definir em um último parâmetro, por exemplo, o que eu quiser...

Tipo:

.html, .crab, .qualquer-coisa ou até mesmo "." nenhum e qualquer coisa...
"Esconde" a tecnologia para os menos avisados e seu maior benefício mesmo já sabemos que refere-se à otimização para motores de busca.

Esse abaixo é muito simples... mas tão simples que da medo de ser falho hehehehe

Fiz assim no .htacces
RewriteEngine On
RewriteRule !\.(jpg|jpeg|gif|css|swf|txt|js|png)$ index.php

No conf do Apache defini AllowOverride como all

Bom até agora tudo normal... e meio que padrão na utilização do mod_rewrite


No .htaccess eu estou definindo que todo o tráfego passa pelo arquivo index.php menos arquivos que estão dentro do conjunto.

Na index.php é feito os processos necessários, manipulação dos parâmetros etc...

Utilizo o explode() para separar os parâmetros, mas já li em alguns lugares que explode() não é legal para isso e tem forma melhor... :ponder: porém todos os exemplos que se asemelham à este utiliza explode()

Enfim...

ainda utilizando do explode() :D faço assim em um exemplo de URL como o abaixo

o que seria:
www.target.com.br/?cat=php&tuto=cadastro

passo a utilizar assim:
www.target.com.br/php/cadastro/tutorial-cadastro-login.crab

$gets = explode("/", $_SERVER['REQUEST_URI']);
$gets = array_shift($gets);

$secao = (isset($get[0])) ? $get[0] : NULL;
$subsecao = (isset($get[1])) ? $get[1] : NULL;

$secao = (isset($gets[0])) ? $gets[0] : NULL;
$subsecao = (isset($gets[1])) ? $gets[1] : NULL;


// $secao = php
// $subsecao = cadastro

// brinco como eu quiser agora...

switch($secao){

case "php" :

switch ($subsecao){

case "cadastro" :

...
...
etc...


Sendo assim posso manipular como eu quiser, mas até aí tudo bem o interessante que posso brincar com o último parâmetro, posso colocar qualquer coisa e depois manipular ou não... :D
Isso ajuda para utilizar palavras chaves relacionadas com o conteúdo do link para otimizar aos bots

Posso usar quantos parâmetros eu quiser, depois é só adaptar de forma que de para manipular os que desejo manipular.

Minha dúvida é se utilizar o explode() para esse fim é fraco como dizem ou se para a forma que eu estou fazendo não tem forma mais adequada.
Também outra dúvida é se não força muito o servidor redirecionando todo o tráfego para um arquivo específico...

Valeu (y)Até mais

#2 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 02/02/2009, 15:15

Eae Crab.. utilizei seu código, porém ele só ta com dois erros..

1: Array_shift, serve pra retirar o primeiro valor do array e retorná-lo. Isto é.. se vc usar a mesma váriavel, ele vai sobrescrever a váriavel $gets[], com o valor extraído.. que é vázio.
Mudar isso:
$gets = array_shift($gets);
Para isso:
$extraido = array_shift($gets);
Assim ele extraí o valor do array.

2: Você ta usando outra váriavel do array:

$secao = (isset($get[0])) ? $get[0] : NULL;


Ou no erro 1, vc colocou a váriavel errada ou no 2. Eu alterei esses 2 e funcionou certinho.

Abraços,
Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#3 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 02/02/2009, 15:35

possamai...
Quanto ao $gets e depois eu usar $get[] sem o "s" ... :( esqueci o "s" mesmo...
falta de atenção ao repassar meu cod para o fórum...
já alterei lá

MAS... na verdade esse é o único erro que poderia ter encontrado no cod pois o restante que citou não é bem assim, pois é para sobrescrever mesmo e teu conceito sobre array_shift() está meio confuso para não dizer inteiramente... :D

Aplicando o array_shitf(), $gets continua sendo um array(), porem sem a 'url root' como um valor deste array() e retrocedendo o valor das chaves dos demais valores no array em 1.

Assim meu array é de valores que começam a partir da 1ª "/" e não antes dela.



Explicando melhor porque o primeiro não é erro


array_shift


(PHP 4, PHP 5)

array_shift() retira o primeiro elemento de array e o retorna, diminuindo array em um elemento e movendo todos os outros elementos para trás. Todas as chaves numéricas alteradas para começar a contar a de 0 (zero), enquanto chaves string permanecerão inalteradas.

-------------------------------------

... quando ele diz que O RETORNA está querendo dizer que retorna o array() modificado hehehe (y)
... entendo que pareceu confuso para você lá no manual, pois mais abaixo ele diz que:

Valor Retornado

Retorna o valor removido, ou NULL se array for vazio ou não é um array


Olhando com a atenção devida teria entendido que ele retorna o valor removido SE ARRAY FOR VAZIO OU SE NÃO É UM ARRAY


Então...

Exemplo de como fica utilizando ele em um array e que não seja vazio :D:

www.teusite.com.br/php/oop

aplicando um explode nas "/" aí ficaria

[0] = www.teusite.com.br
[1] = php
[2] = oop

no meu exemplo eu quero tratar o que vem depois do www.teusite.com.br... então para isso eu apliquei o array_shift() que retira o www.teusite.com.br e os outros valores assumem decrementam '1' do valor de suas chaves.

[0] = php
[1] = oop

Enfim... Sacou ?

(y)Até mais

#4 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 02/02/2009, 16:05

Hummmm.... certo certo .. intendi sim...
Realmente houve um equívoco meu.. quando o manual disse e o retorna, eu havia interpretado como retorna o valor extraído.. :P

Só mais uma coisa que não intendi.. quando usei o meu código como você postou..
o $get[0] não trazia minha url (ex: www.meusite.com.br).. simplesmente trouxe ele vazio.. que estranho.. :ponder:

Outra coisa crab.. tu sabe o porque de quando acesso www.meusite.com.br/login/ ele some com as imagens e css? Eu não intendi muito bem a questão do :
RewriteRule !\.(jpg|jpeg|gif|css|swf|txt|js|png)$ index.php
.. traduzindo.. tudo que for imagem, css ele vai direcionar para index.php ? ??? e qual a finalidade da Exclamação no começo do Rewrite?

Desculpe tantas perguntas.. e obrigado por me corrigir.. ;)

Abraços
Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#5 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 02/02/2009, 16:10

Hummmm.... certo certo .. intendi sim...
Realmente houve um equívoco meu.. quando o manual disse e o retorna, eu havia interpretado como retorna o valor extraído.. :P

Só mais uma coisa que não intendi.. quando usei o meu código como você postou..
o $get[0] não trazia minha url (ex: www.meusite.com.br).. simplesmente trouxe ele vazio.. que estranho.. :ponder:

Outra coisa crab.. tu sabe o porque de quando acesso www.meusite.com.br/login/ ele some com as imagens e css? Eu não intendi muito bem a questão do :

RewriteRule !\.(jpg|jpeg|gif|css|swf|txt|js|png)$ index.php
.. traduzindo.. tudo que for imagem, css ele vai direcionar para index.php ? ??? e qual a finalidade da Exclamação no começo do Rewrite?

Desculpe tantas perguntas.. e obrigado por me corrigir.. ;)

Abraços
Possamai



estou de saída mas dou uma luz em alguns pontos aqui...

$get[0] te retornava vazio porque era para ser $gets[0] com "s" lembra hehehe

Quanto as imagens e css é ao contrário... esses tipos ali não serão redirecionados.

(y)Até mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq