Ir para conteúdo

POWERED BY:

Arquivado

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

Ringeril

[Resolvido] Erro com urls amigaveis

Recommended Posts

Não consigo usar as urls amigaveis, já ativei o Rewrite no httpd do Apache e coloquei o .htaccess na raiz:

 

.htaccess

RewriteEngine on 
RewriteRule ^([a-z,0-9,A-Z,_-]+)$ /$0.php?$1=$2
Quando entro por exemplo:

http://localhost/artigos/id/20

 

Não funciona!

 

Já tentei usar também:

.htaccess

RewriteEngine on 
RewriteRule artigos/(.*)$ artigos.php?id=$1 [L]
Entrando em:

http://localhost/artigos/20

E também não funciona!

 

Como consigo fazer isso dar certo? ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Suas rules tem alguns erros.

 

Rule1:

1 - A contagem dos 'blocos de match' começa em 1.
2 - /$0.php?$1=$2 não aponta para uma página e sim uma diretória dentro da atual.
3 - Só existe um 'bloco de match' na ER,no redirect você chama 3 blocos.

Rule2:

2 - O inicio da er não foi delimitado (^).

Dá uma estudada em ERs.

A...e as rules agora:

Rule1:

RewriteRule ^([a-z]+)\/([a-z]+)\/(.*)$ $1.php?$2=$3

Rule2:

RewriteRule ^artigos\/(.*)$ artigos.php?id=$1

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado eibon, suas explicações foram ótimas.

 

Estou usando agora esse script para pegar o ultimo parametro, que seria o id e pesquisar no bd:

 

$requestURI = explode('/', $_SERVER['REQUEST_URI']);
$scriptName = explode('/', $_SERVER['SCRIPT_NAME']);
$scriptNameArray = array_values($scriptName);

for($i= 0; $i < sizeof($scriptNameArray); $i++) {
	if ($requestURI[$i] == $scriptName[$i]) {
		unset($requestURI[$i]);
	}
}

$command = array_values($requestURI);
Mas a url fica dessa maneira:

http://localhost/artigos.php/nid/20

 

Não tem como fazer a url ficar assim?

http://localhost/artigos/nid/20

 

Abraço, desculpe o incomodo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com uma rewriteRule é possivel sim.Você está fazendo de um jeito que é meio que gambiarra.

Usa a rule ali que te passei...e acessa do jeito que você ta querendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae eibon, não estou conseguindo acessar como dito, os scripts ficaram assim:

 

.htaccess

Options +FollowSymLinks
RewriteEngine on 
RewriteRule ^([a-z]+)\/([a-z]+)\/(.*)$ $1.php?$2=$3
artigos.php

...........
$requestURI = explode('/', $_SERVER['REQUEST_URI']);
$scriptName = explode('/', $_SERVER['SCRIPT_NAME']);
$scriptNameArray = array_values($scriptName);

for($i= 0; $i < sizeof($scriptNameArray); $i++) {
	if ($requestURI[$i] == $scriptName[$i]) {
		unset($requestURI[$i]);
	}
}

$command = array_values($requestURI);

$id = $command[0];

$ver=mysql_query("SELECT * FROM noticias WHERE nid='$id'"
...........
Tentei acessar:

http://localhost/artigos/nid/21 ou http://localhost/artigos/21 ou http://localhost/artigos.php/nid/21

Não consegui.

 

Tentei acessar:

http://localhost/artigos.php/21

Consegui.

 

Se não der ou não conseguir mudar, acho que já está bom.

 

Agradecido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então seria alguma configuração do apache?

mod_rewrite = ativado

 

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

EDIT

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

 

No apache eu tirei o # (comentario) do : LoadModule rewrite_module modules/mod_rewrite.so

Mas agora vi em alguns tutoriais que tem essa linha também: AddModule mod_rewrite.c

 

Mas não acho nela no httpd.conf e quando adiciono dá problema.

 

O que devo fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aee, consegui fazer funcionar!!

O que eu fiz foi mudar as permissões de pasta:

 

<Directory />

Options FollowSymLinks Indexes
AllowOverride AuthConfig
<Directory "outras pastas" />

Options Indexes FollowSymLinks
AllowOverride All

Ai deu certo.

Abraço e obrigado!

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.