Php + Url Amigável = Erros
Started By Maykel Esser, 14/01/2010, 16:40
5 replies to this topic
#1
Posted 14/01/2010, 16:40
Olá gente!
Estou desenvolvendo um site teste, e estou tentando aprender URL amigável... funciona perfeitamente quando passo só 1 atributo, ex:
http://localhost/ (seria o index.php)
http://localhost/noticias (seria o noticias.php)
Porém, quando quero passar um parâmetro adicional, ou 2, dá erro e não sei o que acontece. Acredito que seja pq uso includes para fazer as url amigáveis, e não é possível passar parâmetros através de includes. Porém, como posso resolver isso?
ex: http://localhost/noticias/17/
controle.php
[codebox]<?php
$url = strip_tags($_SERVER['REQUEST_URI']);
$url_array = explode("/", $url);
array_shift($url_array);
print_r($url_array);
if(empty($url_array) or $url_array[0] == ""){
include("index.php");
exit();
}else{
include($url_array[0].".php");
exit();
}
?>[/codebox]
Gostaria de saber também como capturar os parametros da url depois de convertidos com o .htaccess... dá pra usar $_GET['noticias'] normalmente? acho que não né... gostaria de capturar o "17" para fazer a consulta no banco de dados depois...
noticias.php
[codebox]<body>
<h1>Teste de URL amigável</h1>
<h2>Notícias</h2>
<ul>
<li><a href="/">Index</a></li>
<li><a href="/noticia/17">Notícia nº 17</a></li>
</ul>
<h3>URL: <?php $_GET['noticia']."/".$_GET['id']; ?></h3>
</body>[/codebox]
.htaccess
[codebox]RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ controle.php [L,NC][/codebox]
Estou desenvolvendo um site teste, e estou tentando aprender URL amigável... funciona perfeitamente quando passo só 1 atributo, ex:
http://localhost/ (seria o index.php)
http://localhost/noticias (seria o noticias.php)
Porém, quando quero passar um parâmetro adicional, ou 2, dá erro e não sei o que acontece. Acredito que seja pq uso includes para fazer as url amigáveis, e não é possível passar parâmetros através de includes. Porém, como posso resolver isso?
ex: http://localhost/noticias/17/
controle.php
[codebox]<?php
$url = strip_tags($_SERVER['REQUEST_URI']);
$url_array = explode("/", $url);
array_shift($url_array);
print_r($url_array);
if(empty($url_array) or $url_array[0] == ""){
include("index.php");
exit();
}else{
include($url_array[0].".php");
exit();
}
?>[/codebox]
Gostaria de saber também como capturar os parametros da url depois de convertidos com o .htaccess... dá pra usar $_GET['noticias'] normalmente? acho que não né... gostaria de capturar o "17" para fazer a consulta no banco de dados depois...
noticias.php
[codebox]<body>
<h1>Teste de URL amigável</h1>
<h2>Notícias</h2>
<ul>
<li><a href="/">Index</a></li>
<li><a href="/noticia/17">Notícia nº 17</a></li>
</ul>
<h3>URL: <?php $_GET['noticia']."/".$_GET['id']; ?></h3>
</body>[/codebox]
.htaccess
[codebox]RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ controle.php [L,NC][/codebox]
Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens!
#2
Posted 14/01/2010, 16:55
Erm, URL amigável com PHP?
Porque não no próprio .htaccess?
[]s Até mais
Porque não no próprio .htaccess?
[]s Até mais
#3
Posted 14/01/2010, 20:49
Se $url_array[0] é "noticias", $url_array[1] será "17".
Da forma que .htacces está, realmente não tem como puxar os valores pelo $_GET. O que você poderia fazer é criar variáveis $_GET alí dentro do controle.
Como você dá include nos arquivos alí dentro do controle, você conseguirá recuperar os valores dos $_GET falso sem problema nos arquivos includados.
Mas acho que tem como fazer isso pelo .htaccess, o PF que gosta que gosta de fazer esse tipo de arte. Mas para mim, se tem mais liberdade quando tudo é tratado no arquivo controle.
Da forma que .htacces está, realmente não tem como puxar os valores pelo $_GET. O que você poderia fazer é criar variáveis $_GET alí dentro do controle.
$_GET['pagina'] = $url_array[0]; // noticias $_GET['id'] = $url_array[1]; // 17
Como você dá include nos arquivos alí dentro do controle, você conseguirá recuperar os valores dos $_GET falso sem problema nos arquivos includados.
Mas acho que tem como fazer isso pelo .htaccess, o PF que gosta que gosta de fazer esse tipo de arte. Mas para mim, se tem mais liberdade quando tudo é tratado no arquivo controle.
- Maykel Esser likes this
att,
Muller Dias
ex-administrador Fórum WMO
Muller Dias
ex-administrador Fórum WMO
#4
Posted 14/01/2010, 22:44
Só dá pra falar em .htaccess quando todos os possíveis URIs já estiverem definidos. Mas é tão liberal quanto o próprio controller. Diria até que mais, digamos, "apropriado".
[]sAté mais
[]sAté mais
- Maykel Esser likes this
#5
Posted 15/01/2010, 08:04
pois é... eu nao vou poder ter livre acesso ao htaccess. Como vou poder cadastrar quase 100% do site lá, inclusive seções, categorias, etc., quero tentar deixar tudo no PHP... mas eu descobri aqui um jeitinho brasileiro.
Como se trata de include, pensei no seguinte: Ele incluiu o arquivo. Não foi aberta outra página... posteriormente, a variavel $url_array pode ser recuperada. E deu certo
Mas por curiosidade, como eu faria isso só com .htaccess?
Como se trata de include, pensei no seguinte: Ele incluiu o arquivo. Não foi aberta outra página... posteriormente, a variavel $url_array pode ser recuperada. E deu certo
Mas por curiosidade, como eu faria isso só com .htaccess?
Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens!
#6
Posted 15/01/2010, 13:58
Depende das necessidades...Mas por curiosidade, como eu faria isso só com .htaccess?
Um exemplo bem genérico seria assim:
RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(\w+)/?(?<img src='http://forum.wmonline.com.br/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />\d+)/?)? controller.php?pg=$1&id=$2Neste exemplo ao acessar
/noticias/17
você teria no $_GET
: pg=noticias
e id=17
. No caso de não passar nenhum número, você teria pg=noticias
e id=
, o que no código vai significar uma string vazia.Mas tu podes partir de um exemplo básico e ir adaptando conforme as reais necessidades.
[]sAté mais
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)