Ir para conteúdo

POWERED BY:

Arquivado

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

programador_master

URL Amigáveis Solução do Problema

Recommended Posts

Ó eu aqui d novo. Eu vou ressuscitar um assunto que é muito discutido nos fóruns: as URL amigáveis. Muito se explica e fala sobre esse assunto e acredito que pra quem saiba do assunto é muito mais fácil fazer tudo o que está descrito num simples tutorial. Estou lendo agora mesmo sobre as expressões regulares, o módulo do Apache e o arquivo htaccess em alguns blogs como é o caso do http://brunotorres.net/urls, que fala exatamente sobre esse assunto. Até então, uso este código para exibir minhas páginas de forma dinâmica:

 

<?php

$pagina = (isset($_GET['pagina'])) ? $_GET['pagina'] : "home";

if(empty($pagina)) {

include("home.php");

}

elseif(substr($pagina, 0, 4)=='http' or substr($pagina,0, 1)=="/" or substr($pagina, 0, 1)==".")

{

echo '<br><font face=arial size=2><br><b>A página não existe.</b><br>Por favor selecione uma página a partir do Menu Principal.</font>';

}else{

include("$pagina.php");

}

?>

 

Foi assim que aprendi a incluir páginas sem ter que recriar todo o conteúdo fixo, como o menu, de novo. Infelizmente não consegui aprender como utilizar as URL amigáveis. Já tentei o modo tradicional que é criar o arquivo .htaccess colocar na raiz do servidor ou onde está a página index e criar a regrinha do módulo Rewrite. Isso nunca funciona. Como todo mundo que faz diz que funciona, acho que o problema está na forma como eu estou fazendo. Pesso a ajuda do povo aqui do fórum pra solucionar esse problema de uma vez por todas. Desculpa se estou sendo antipático, mas por favor não respodam, "Já pesquisou no fórum ou no google? Tem muito conteúdo na internet sobre esse assunto". A resposta é SIM, já pesquisei e tudo me leva a artigos como o que postei antes. Talves com esse código fique fácil pra vocês me ajudarem, realmente não consigo fazer minhas URL's ficarem amigáveis. Esse é o meu desafio gostaria de contar com a ajuda do pessoal aqui do fórum pra resolvê-lo. Aliás vou postar o htacces também:

 

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-f

RewriteCond %{SCRIPT_FILENAME} !-d

RewriteRule ^(.*)$ index.php?pagina=$1

 

É o famoso ctrl+c e ctrl+v já entendi +ou- o cada uma das linhas faz agora é entender como fazer funcionar porque ta tenso. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

trabalhar com htaccess é facil

RewriteRule REGRA PAGINA PARAMETROS

o htaccess vai 'camuflar' e rodar no arquivo index.php

 

 

1. você deve criar o arquivo htaccess

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

 

2. depois você vai criar uma index.php contendo:

echo $_SERVER['REQUEST_URI'];

 

3. pode testar, localhost/pagina/alguma_coisa.html

 

 

trabalhar com htaccess requer o foco no REQUEST_URI

você vai pegar a url e desmembrar

tambem pode definir as regras individuais no proprio htaccess, mas esse exemplo dou depois que você rodar este teste acima

 

 

***

suponho que mod_rewrite ja esta configurado

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

trabalhar com htaccess é facil

RewriteRule REGRA PAGINA PARAMETROS

o htaccess vai 'camuflar' e rodar no arquivo index.php

 

 

1. você deve criar o arquivo htaccess

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

 

2. depois você vai criar uma index.php contendo:

echo $_SERVER['REQUEST_URI'];

 

3. pode testar, localhost/pagina/alguma_coisa.html

 

 

trabalhar com htaccess requer o foco no REQUEST_URI

você vai pegar a url e desmembrar

tambem pode definir as regras individuais no proprio htaccess, mas esse exemplo dou depois que você rodar este teste acima

 

 

***

suponho que mod_rewrite ja esta configurado

 

[]s

 

Legal, até ai funcionou, só que está retornando a URL dentro da página. Onde exatamente vai o códgigo?

Vou postar como estou fazendo:

 

 

<div id="menu-nav">

<ul id="menu">

<li><a href="index.php?pagina=arquivos/home" title="Principal">Home</a></li>

<li><a href="index.php?pagina=arquivos/sobre" title="Nossa casa">Sobre</a></li>

</ul>

</div>

 

<div id="content">

<?php

$pagina = (isset($_GET['pagina'])) ? $_GET['pagina'] : "home";

if(empty($pagina)) {

include("home.php");

}

elseif(substr($pagina, 0, 4)=='http' or substr($pagina,0, 1)=="/" or substr($pagina, 0, 1)==".")

{

echo '<br><font face=arial size=2><br><b>A página não existe.</b><br>Por favor selecione uma página a partir do Menu Principal.</font>';

}else{

include("$pagina.php");

}

?>

 

</div>

 

A URL que retorna está assim :

 

 

Posta ai as regras individuais que você flw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esqueca isso

 

htaccess é para ser acessado como:

http://localhost/carros/fusca

 

 

como disse acima, você vai pegar a url e desmembrar

sua categoria seria carros e a opção seria fusca

http://localhost/carros/fusca

1. carros

2. fusca

 

 

é um exemplo MUITO grotesco, mas essa é a ideia

as regras individuais no htaccess so valem para projeto pequeno

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criatividade Zero, desculpa minha ignorância, mas n ficou claro ainda, eu não estou usando include e talves por isso não esteja dando certo. Eu uso esse código pra carregar o conteúdo da minhas páginas:

 

<?php

$pagina = (isset($_GET['pagina'])) ? $_GET['pagina'] : "home";

if(empty($pagina)) {

include("home.php");

}

elseif(substr($pagina, 0, 4)=='http' or substr($pagina,0, 1)=="/" or substr($pagina, 0, 1)==".")

{

echo '<br><font face=arial size=2><br><b>A página não existe.</b><br>Por favor selecione uma página a partir do Menu Principal.</font>';

}else{

include("$pagina.php");

}

?>

 

e nos links como devo colocar? Desculpa insistir nisso, mas é porque realmente não conseguir entender o funcionamento por completo das URL amigáveis, parece tão simples mas não estou conseguindo fazer essa jeringonça funcionar. Se puder me dizer o que está errado ajudaria muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se puder me dizer o que está errado ajudaria muito.

o problema é simples, você esta preso ao $_GET, livre-se disso, você nao vai obter os dados desta forma!

trabalhar com htaccess vai fazer você trabalhar com a URL, e não parâmetros

 

 

url:

www.site.com.br/notícia/uma-noticia.html

o htaccess vai fazer com que todas as páginas entrem pela index.php

 

index.php:

você vai pegar a URL e desmembrar

/notícia = categoria
/uma-noticia.html = texto

 

 

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

 

bom, você disse que o exemplo que passei está funcionando, então vou tentar fazer um exemplo - sou pessimo para explicar

http://localhost/noticia/uma-noticia.html

 

coloque na sua index.php:

echo '<pre>';
print_r( explode( '/' , $_SERVER['REQUEST_URI'] ) );
echo '</pre>';

 

saida:

Array
(
   [0] => 
   [1] => noticia
   [2] => uma-noticia.html
)

 

 

isso funcionou?

ficou mais facil de entender?

estou indo devagar, poste o que aconteceo pra continuar explicando

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso funcionou?

ficou mais facil de entender?

 

Funcionar funcionou, mas ficar claro, não =s

Não entendi porque do 'echo'.

 

Não estou conseguindo interligar $_SERVER['REQUEST_URI'] com a transformação das url amigáveis

 

estou indo devagar, poste o que aconteceo pra continuar explicando

 

Array

(

[0] =>

[1] => testando

[2] => index.php

)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Funcionar funcionou, mas ficar claro, não =s

Não entendi porque do 'echo'.

se você nao reparou, estou tentando explicar cada etapa da coisa

exemplo pronto você ja encontrou centenas por ai e provavelmente funcionam, so que você nao sabe como fazer

 

 

Array
(
[0] => 
[1] => testando
[2] => index.php
)

 

'testando' seria como uma categoria do site

$url = explode( '/' , $_SERVER['REQUEST_URI'] );
$categoria = $url['1'];

 

se você acessar:

http://localhost/noticia/uma-noticia.html

sua $categoria vai ser noticia

 

 

você vai precisar de outras verificações, mas basicamente é apenas 'quebrar' a url e identificar as partes

if $categoria = 'noticia'
elseif $categoria = 'enviar-noticia'
...
else
pagina errada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu mudo o valor do array por exemplo pra [5]:

 

$url = explode( '/' , $_SERVER['REQUEST_URI'] );

$categoria = $url['5'];

echo $categoria;

 

posso colocar ate 5 categorias separadas pela '/',

 

Mas e se essas categorias n existirem, n deveria retornar um erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu mudo o valor do array por exemplo pra [5]:

posso colocar ate 5 categorias separadas pela '/',

 

 

veja o link go G1

http://g1.globo.com/economia/negocios/noticia/2011/08/petrobras-tem-lucro-liquido-de-r-109-bilhoes-no-trimestre.html

categoria: economia

editoria: negocios

noticia: noticia

parametro_1: 2011/08

parametro_2: petrobras-tem-lucro-liquido-de-r-109-bilhoes-no-trimestre

 

normalmente a 1ª barra é a sua categoria

 

 

 

Mas e se essas categorias n existirem, n deveria retornar um erro?

sim, disse isso acima

 

if $categoria = 'noticia'

elseif $categoria = 'enviar-noticia'

...

else

pagina errada

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, mas no caso eu não tenho nenhuma categoria, é um site simples, depois da URL já vem as páginas.

Todos os meus arquivos estão na raiz.

 

O problema é que a url não fica assim:

www.meusite.com.br/sobre

www.meusite.com.br/contato

 

Fica assim:

www.meusite.com.br/sobre.php

www.meusite.com.br/contato.php

 

Gostaria de tirar a extensão dos arquivos. Dá pra fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caraca, fechei a página na hora que eu ia responder <_<

Brother não sei o que achar disso, na verdade agradeço pela paciência de me explicar como funciona. Aliás enquanto você me explicava como fazia, pesquisei sobre o assunto e vi que estava fazendo errado.

Agora ao invés de query string estou dando include nas páginas.

As url's ficaram amigáveis, tudo bunitinhu ;) agora pra ficar clean quero tirar a extensão .php.

 

Só pra constar, não tenho categorias ou id's sendo passados pela url.

As páginas estão todas na raiz chegando no máximo à www.meusite.com.br/página.php

 

Como tu flw que não lembra, achei algo no GOOGLE, mas não conseguir fazer funcionar. Não sei se devo colocar junto com o primeiro código ou fazer outro arquivo separado, sei lá. Se tiver na dispo da uma olhada e ve o que tu acha:

 

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME}\.php -f

RewriteRule ^([^/]+)/$ $1.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

a regra que uso é RewriteRule ^(.*)$ index.php [QSA,L]

pq trabalho com MVC e estou na base do meu FW

 

no google achei alguns, você vai ter que dar uma olhada, eu realmente nao lembro

 

 

nada impede você de usar a regra acima citada, mas se nao me engano, existe uma propria para isso

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.