Ir para conteúdo

POWERED BY:

Arquivado

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

cassiano óliver

URLS amigáveis

Recommended Posts

Olá pessoal,

 

To com muita dificuldade em fazer funcionar urls amigáveis em localhost.

 

Já segui uns 3 tutoriais, mas sem sucesso.

 

No navegador dá erro "not found", continua interpretando como se eu tivesse acessando diretórios.

 

Quero fazer com que esse tipo de url funcione:

www.site.com.br/?pagina=noticias

www.site.com.br/?pagina=noticias&id=1

 

o diretório local está assim:

 

htdocs

---site

 

o .htaccess devo colocar no htdocs ou no diretório site?

 

Se alguém puder me ajudar...

 

* Já realizei as alterações no http.conf conforme esse link: http://forum.imasters.com.br/index.php?/topic/203965-urls-amigaveis/

Compartilhar este post


Link para o post
Compartilhar em outros sites

o .htaccess devo colocar no htdocs ou no diretório site?

Site.

 

Quero fazer com que esse tipo de url funcione:

www.site.com.br/?pagina=noticias

www.site.com.br/?pagina=noticias&id=1

 

Isto não é url amigável... Nada mais é do que uma abreviatura

www.site.com.br/index.php?pagina=noticias

www.site.com.br/index.php?pagina=noticias&id=1

 

Usando url amigável nestes exemplos, ficaria assim

www.site.com.br/noticias

www.site.com.br/noticias/1

 

Agora uma sugestão de .htaccess

 

RewriteEngine on
RewriteRule ^([a-z0-9_-]+)(\/[a-z0-9_-]+)?(\/[0-9]+)?$ index.php?pagina=$1&categoria=$2&id=$3

No caso vai direcionar sempre para index.php. Daí depende da sua aplicação

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

www.site.com.br/noticias

www.site.com.br/noticias/1

Na verdade era pra transformar aquelas, nessas aí acima, esqueci de mencionar...

 

meu .htaccess está no diretório site:

RewriteEngine On
RewriteRule ^([a-z0-9_-]+)(\/[a-z0-9_-]+)?(\/[0-9]+)?$ index.php?pagina=$1

se eu for no navegador e digitar site.com.br/teste continua dando erro 404...

 

index.php

 

echo "teste";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, eu não entendo muito de ER, mas pelo que eu sei, você tá passando 3 parâmetros na ER e só está pegando 1 depois.

 

Tenta colocar exatamente como eu coloquei.

 

RewriteEngine on
RewriteRule ^([a-z0-9_-]+)(\/[a-z0-9_-]+)?(\/[0-9]+)?$ index.php?pagina=$1&categoria=$2&id=$3

Veja se funciona

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

descobri aqui porque não funcionava, precisa colocar na url o index.php

 

o htaccess ta assim

RewriteEngine on

RewriteRule ^([a-z0-9_-]+)(\/[a-z0-9_-]+)?(\/[0-9]+)?$ index.php?pagina=$1

index.php

<?php
$gets = explode("/",str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));
#:: Elimita o 1° tem da array que no nosso caso é sempre vazio
array_shift($gets);
switch($gets[2]) {
case "contato":
echo "contato";
break;

case "home":
echo "home";
break;

default:
echo "home";
break;
}
?>

ta funcionando corretamente...

 

 

agora se, quanto eu precisar digitar localhost/index.php/noticias/1

como fazer para pegar o id, no caso 1?

e

como fazer para que não seja necessário o index.php na url?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$gets = explode("/",str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));
#:: Elimita o 1° tem da array que no nosso caso é sempre vazio

Se está precisando fazer isto no código e colocar o index.php, está errado.

 

Ou o .htaccess está na pasta errada, ou tem alguma coisa configurada errada no teu Apache.

 

Como está a estrutura de pastas do teu site? Você está usando algum pacote, tipo wamp, xampp? Em qual pasta está o .htaccess?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o endereço que você usa, é http://localhost/europa ou http://localhost/

 

Outra coisa, tenta colocar uma barra antes, referenciando ao raiz do site... Assim..

 

RewriteEngine on
RewriteRule ^([a-z0-9_-]+)(\/[a-z0-9_-]+)?(\/[0-9]+)?$ /index.php?pagina=$1&categoria=$2&id=$3

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, aí complicou pro meu lado... Não consigo mais te ajudar... Vamos esperar aparecer alguém que conhece mais sobre url amigável.

 

Carlos Eduardo

 

brigadão pela atenção!

 

vo desistir e ficar na forma convencional mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu ja tive o mesmo problema, o q acontece eh q você tera q fazer uma gambiarra bonita pra ele funcionar em localhost, pelo seguinte fato

 

os tutos dizem pra quebrar toda a url....

 

so q no site on eh assim http://www.site.com.br/, e localhost , http://localhost/pastadosite/, ou seja, você tem uma barra a mais, um item a mais no array depois q explodir, o site ira considerar q localhost eh a raiz e nao pastadosite.....isso da uma dor da cabeça pa funcionar em linux e windows....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui fazer funcionar..

 

excluí tudo da instalação manual e instalei o xampp, agora ta funcionando....

 

mas surgiu outro problema, não ta incluindo arquivos dentro de outros diretorios, só inclui arquivos que estão na raiz...

 

ex:

 

switch($pg[1]) {
case "home":
include "home.php";
break;
// aqui funcionar normalmente

case "contato":
include "contato/contato.php";
break;
// aqui ele lista os arquivos do diretório ao invés de incluir o contato.php
}

o que está errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não,

arquivo php mesmo.

 

Quando digito localhost/europa/empresa por exemplo, é incluido o empresa.php

Quando digito localhost/europa/contato ele abre o diretório contato, mas o correto seria incluir o arquivo contato.php que está neste diretório.

 

.htaccess

RewriteEngine On
RewriteBase /europa/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9_-]+)(\/[a-z0-9_-]+)?(\/[0-9]+)?$ /europa/index.php

 

index.php

switch($pg[1]) {
case "empresa":
include "empresa.php";
break;
// aqui funcionar normalmente

case "contato":
include "contato/contato.php";
break;
// aqui ele lista os arquivos do diretório ao invés de incluir o contato.php
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, o problema é em uma destas 2 linhas...

 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

O que acontece. Uma delas, não lembro qual delas, diz que se for um diretório, ele ignora o rewrite. Aposto na segunda (!-d deve ser de directory...)

 

Tirando esta linha deve funcionar (eu acho)

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, veja o meu htacess:

 

RewriteEngine on
RewriteRule !\.(gif|ico|jpg|png|css|js|swf|txt)$ index.php

eu abro qualquer um desses tipos de arquivo na boa, e dai a URL leio normalmente com explode.

 

ta funcionando beleza pra mim.

 

 

flw

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.