Ir para conteúdo

POWERED BY:

Arquivado

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

senhorvip

[Resolvido] URL Amigável

Recommended Posts

Eae galera, estou desenvolvendo um site e quando fui fazer o sitemap para enviar aos mecanismos de busca BUUUUUMM caí em desespero.

Os arquivos XML não reconhecem o caractere "&" e na minha URL contém esse caractere, veja: "?p=empresa_ver&id=824"

tentei substituir pelo & pelo & mas quando entro no endereço "?p=empresa_ver&id=824" aparece uma página em branco.

 

então procurei saber mais sobre URL AMIGÁVEL.

 

mas estou com um problema, veja:

 

Criei meu arquivo .HTACCESS mas não funciona.

 

minha URL hoje é assim:

 

http://www.aondee.com.br/index/?p=empresa&id_categoria=252

http://www.aondee.com.br/index/?p=empresa_ver&id=824

 

 

fiz assim no arquivo .HTACCESS

 

RewriteEngine On

RewriteRule ^categoria/([0-9]+)/?$ /index.php?p=empresa&id_categoria=$1

RewriteRule ^empresa/([0-9]+)/?$ /index.php?p=empresa_ver&id=$1

 

 

deveria funcionar assim:

 

http://www.aondee.com.br/index/empresa/824

 

mas dá erro.

 

ME AJUDEM NESSE SUFOCO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está executando isso local?

Se for local, verifica se esse host está liberando rescrita... aquela linha AllowOverride all

 

se você não souber o que fazer, me diga qual erro está dando...

esta no windows xampp?

esta no linux?

Compartilhar este post


Link para o post
Compartilhar em outros sites

[Desulpe por ter duplicado... acho que foi alguma instabilidade no servidor]

Você está executando isso local?

Se for local, verifica se esse host está liberando rescrita... aquela linha AllowOverride all

 

se você não souber o que fazer, me diga qual erro está dando...

esta no windows xampp?

esta no linux?

 

 

 

Não, o site já está no servidor web.

todas as configurações estão corretas, mas a url continua do mesmo jeito ?p=empresa&id=12....

www.aondee.com.br

 

o erro é que não acontece nada. a url continua ?p=empresa&id=12....

Compartilhar este post


Link para o post
Compartilhar em outros sites

O link deve ser chamado da forma amigavel, o htaccess não vai modificar o link pra você ele vai interpretar o link.

 

Se você quer chamar a página de clientes passando id

<a href="http://www.seusite.com.br/clientes/1">Cliente Lorem ipsum</a>

Mas pelo jeito você continua chamando

<a href="http://www.seusite.com.br/index.php?cliente=1">Cliente Lorem ipsum</a>

Tente esse .htaccess

 

Options +FollowSymLinks

RewriteEngine On


RewriteCond %{SCRIPT_FILENAME} !-f

RewriteCond %{SCRIPT_FILENAME} !-d



RewriteRule ^categoria/([0-9]+)/?$ index.php?p=empresa&id_categoria=$1
RewriteRule ^empresa/([0-9]+)/?$ index.php?p=empresa_ver&id=$1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu percebi seu site roda dentro de um diretório chamado index certo?

 

Você colocou o .htaccess nesse diretório, ou está mechendo no diretório raiz?

pq fiz uns teste aqui e parece que está no raiz...

 

se estiver no raiz mude para:

 

RewriteRule ^index/categoria/([0-9]*)/?$ index/index.php?p=empresa&id_categoria=$1

RewriteRule ^index/empresa/([0-9]*)/?$ index/index.php?p=empresa_ver&id=$1

 

Ou crie um .htaccess dentro da pasta index, e deixe como está...

 

 

Se não certo de nenhum jeito, escreve um texo qualquer nesse aquivo htaccess e salve... tente executar e veja se da erro 500... se não der, é pq não está lendo seu htaccess

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu entendi, mas antes de mudar no site eu preciso ter eles funcionando.

 

coloquei conforme você disse e continuou não funcionando,

fiz o que o Rogério pediu, COLOCAR O INDEX antes de /categoria mas veja o que acontece agora.

 

quando eu digito http://aondee.com.br/index/categoria/81 ele me retorna a página http://aondee.com.br/index/categoria/index que é erro.

 

agora o meu arquivo está assim

 

 

Options +FollowSymLinks

RewriteEngine On


RewriteCond %{SCRIPT_FILENAME} !-f

RewriteCond %{SCRIPT_FILENAME} !-d



RewriteRule ^index/categoria/([0-9]+)/?$ index.php?p=empresa&id_categoria=$1
RewriteRule ^index/empresa/([0-9]+)/?$ index.php?p=empresa_ver&id=$1

 

mas como eu disse ele não reconhece a url http://aondee.com.br/index/categoria/81

 

 

 

Para vocês entenderem melhor, eu desenvolvi o site da seguinte maneira.

 

dentro do diretório index existe uma index.php que conversa com a secoes.php que chama os arquivos que estão em ../secoes

 

veja o meu secoes.php abaixo:

 

 

<?

if (strlen($_GET['p'])>0) {
	if (file_exists('../secoes/'.$_GET['p'].'.php')) {
		include('../secoes/'.$_GET['p'].'.php');
	} else {

		switch($_GET["p"])
		{
			default:
				include("../secoes/principal.php"); 
				break;
		}

	}
} else include("../secoes/principal.php");


?>

 

Assim eu sempre terei algo como ?p=contato ou ?p=noticia&id=20 etc... mas quero tornar isso como algo do tipo site.com/noticia/20 ou site.com/contato/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem 1 htaccess na raiz?

Tem algum script para redirecionar para index/ ? tipo, if(alguma coisa) header('Location: index/');

 

se possível mande o .htaccess que está na raiz... e se tiver algum no diretório index renomeio temporariamente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que se não estivesse habilitado teria dado erro 500, pois ele não colocou <IfModule mod_rewrite.c> antes de RewriteEngine On

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente modificar no seu .htaccess:

Options +FollowSymLinks

RewriteEngine On

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

RewriteRule ^categoria/(.*)/$ index.php?p=empresa&id_categoria=$1
RewriteRule ^empresa/(.*)/$ index.php?p=empresa_ver&id=$1

 

Veja só como eu uso nos meus projetos

 

o meu .htaccess está assim

RewriteEngine on

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

RewriteRule ^(.*)$ index.php?pagina=$1
Eu tenho uma index.php que funciona como um Controle de navegação, então todas as páginas são setadas pra index.php

 

Na index.php pra eu receber esses parametros:

$url = explode('/', @$_GET['pagina']);

$pagina = isset($url[0]) && !empty($url[0]) ? $url[0] : null;
$subpagina = isset($url[1]) && !empty($url[1]) ? $url_friendly[1] : null;
$params = isset($url[2]) && !empty($url[2]) ? $url_friendly[2] : null;

Pois acontece o seguinte:

 

Ex.:

Se eu chamar o link http://www.meusite.com.br/empresa/historia/2 e receber isso no php, o valor de $_GET['pagina'] será "empresa/historia/2", então eu tenho que quebrar isso pra transformar nos parametros que preciso.

 

Conforme código php acima a variável $pagina depois de tratado fica com o valor "empresa", $subpagina com o valor "historia" e $params com o valor 2...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O mod_write do apache está habilitado sim.

 

na raíz do site eu tenho um index com o script abaixo:

 

 

<? 

header('Location: ./index',true); 

?>

 

o htaccess está na raíz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thiago, minha index tb funciona como um controle de navegação, no meio dela eu inseri

 

include ('secoes.php');

 

veja o script da minha secoes.php

<?

if (strlen($_GET['p'])>0) {
        if (file_exists('../secoes/'.$_GET['p'].'.php')) {
                include('../secoes/'.$_GET['p'].'.php');
        } else {

                switch($_GET["p"])
                {
                        default:
                                include("../secoes/principal.php"); 
                                break;
                }

        }
} else include("../secoes/principal.php");


?>

Agora eu coloquei isso na minha .htaccess

RewriteEngine on

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

RewriteRule ^(.*)$ ?p=$1

 

consigo acessar a página http://aondee.com.br/index/empresa/255

 

mas ele me retorna a index sem imagens e sem o meu CSS.

 

 

que loucura...

Compartilhar este post


Link para o post
Compartilhar em outros sites

montei uma estrutura igual a sua aqui, e com esse htaccess que estou de mandando funciona...

 

 

mas o htaccess tem que estar na raiz... e não dentro do dir index... e dentro do dir index não deve ter outro htaccesss

 

Options +FollowSymLinks

RewriteEngine On

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

RewriteRule ^(empresa|categoria)/(.*)\.(jpg|jpeg|gif|png|css|js)  index/$2.$3

RewriteRule ^categoria/([0-9]+)/?$ index/index.php?p=empresa&id_categoria=$1
RewriteRule ^empresa/([0-9]+)/?$ index/index.php?p=empresa_ver&id=$1 

RewriteRule ^/?$ index/index.php

diz se funciona...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postei a solução para esse problema aqui:

 

http://forum.imasters.com.br/index.php?/topic/402394-problema-com-urls-amigaveiveis/

 

O que acontece é que o servidor passa a interpretar os links como pastas...

 

Se você está em meusite.com.br/empresa/historia, o servidor interpreta devido ao htaccess que você está no diretorio www/empresa/historia e como você chama o css imagens e js diretamente com o caminho fisico(<img src="imagens/imagem.jpg" />) quando ele estiver em uma página("diretorio") ele perde esse caminho fisico e não mostra nada....

 

O bug é:

Se você estiver em meusite.com.br você deve usar "css/estilo.css", se você estiver em meusite.com.br/empresa você deveria usar "../css/estilo.css"

 

Pra corrigir isso crio um path com o caminho das pastas que me dá o caminho relativo...

// ao invés disso<img src="imagens/imagem.jpg" />// use isso<img src="<?php echo $_imagens_ ?>/imagem.jpg" />// o resultado do uso do path é <img src="http://www.meusite.com.br/imagens/imagem.jpg" />
Veja o outro tópico que é a solução exata pro problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

montei uma estrutura igual a sua aqui, e com esse htaccess que estou de mandando funciona...

 

 

mas o htaccess tem que estar na raiz... e não dentro do dir index... e dentro do dir index não deve ter outro htaccesss

 

Options +FollowSymLinks

RewriteEngine On

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

RewriteRule ^(empresa|categoria)/(.*)\.(jpg|jpeg|gif|png|css|js)  index/$2.$3

RewriteRule ^categoria/([0-9]+)/?$ index/index.php?p=empresa&id_categoria=$1
RewriteRule ^empresa/([0-9]+)/?$ index/index.php?p=empresa_ver&id=$1 

RewriteRule ^/?$ index/index.php

diz se funciona...

 

 

Rogério, funcionou PERFEITAMENTE.

Obrigado, agora vou arrumar todos os links.

 

cara valeu mesmo, agora vou estudar mais sobre o assunto para sempre poder adaptar aos novos sites que eu desenvolver.

 

veja o resultado:

 

http://www.aondee.com.br/letra/a

http://www.aondee.com.br/categoria/81

http://www.aondee.com.br/empresa/651

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.