Ir para conteúdo

POWERED BY:

Arquivado

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

marcelo2605

[Resolvido] Primeira tentativa com RewriteEngine

Recommended Posts

Pessoal, essa é minha primeira tentativa de usar o RewriteEngine no .htaccess para manipular a url.

 

Fiz o seguinte:

 

tenho uma tabela com id, titulo e texto

 

tenho o arquivo index.php dentro da pasta artigos

 

no arquivo index.php, tenho duas pesquisas no banco: uma para listar todos os artigos e outra para mostrar o artigo que coincide com o id chamado no link:

 

<a href="/artigos/index.php?id=<?php echo $row_rsArtigo['id']; ?>

 

tudo funcionando.

 

então fiz o seguinte arquivo .htaccess:

 

# Enable Rewriting
RewriteEngine on

RewriteRule ^artigos/(\w+)/?$ index.php?id=$1

 

e modifiquei o link para:

 

<a href="/artigos/index.php?id=<?php echo $row_rsArtigo['titulo']; ?>

 

o objetivo era que, ao invés de mostrar na url index.php?id=9, mostrasse o titulo do artigo

 

mas está dando erro 404.

 

O que fiz de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wanderson, não está dando certo. Não sei se preciso fazer alguma modificação nas pesquisas do banco.

 

No momento elas estão assim no arquivo bd:

 

Pesquisa para a lista de artigos:

 

mysql_select_db($database_artigos_db, $artigos_db);
$query_rsArtigos = "SELECT DATE_FORMAT(data, '%M/%Y') as data_formatada, titulo, id FROM artigos WHERE tipo = 0 ORDER BY data DESC";
$rsArtigos = mysql_query($query_rsArtigos, $artigos_db) or die(mysql_error());
$row_rsArtigos = mysql_fetch_assoc($rsArtigos);
$totalRows_rsArtigos = mysql_num_rows($rsArtigos);

 

Pesquisa para o artigo chamado no link:

 

$colname_rsArtigo = "-1";
if (isset($_GET['titulo'])) {
 $colname_rsArtigo = $_GET['titulo'];
}
mysql_select_db($database_artigos_db, $artigos_db);
$query_rsArtigo = sprintf("SELECT * FROM artigos WHERE id = %s", GetSQLValueString($colname_rsArtigo, "text"));
$rsArtigo = mysql_query($query_rsArtigo, $artigos_db) or die(mysql_error());
$row_rsArtigo = mysql_fetch_assoc($rsArtigo);
$totalRows_rsArtigo = mysql_num_rows($rsArtigo);

Compartilhar este post


Link para o post
Compartilhar em outros sites

O melhor seria você não incluir os arquivos na index.php, e sim fazer uma regra para cada página do site, por exemplo

 

RewriteEngine On
RewriteRule ^home/?$ index.php
RewriteRule ^artigos/?$ artigos.php
RewriteRule ^artigos/([0-9]+)/([a-zA-Z0-9-]+)/?$ ver-artigos.php?id=$1&slug=$2

 

Seria melhor, pois você pode colocar títulos individuais para cada página e pra um trabalho de SEO seria melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem essa função do Thiago Belem, que postou no blog dele para transformar slugs

 

/***
* Função para remover acentos de uma string
*
* @autor Thiago Belem <contato@thiagobelem.net>
*/
function removeAcentos($string, $slug = false) {
$string = strtolower($string);

// Código ASCII das vogais
$ascii['a'] = range(224, 230);
$ascii['e'] = range(232, 235);
$ascii['i'] = range(236, 239);
$ascii['o'] = array_merge(range(242, 246), array(240, 248));
$ascii['u'] = range(249, 252);

// Código ASCII dos outros caracteres
$ascii['b'] = array(223);
$ascii['c'] = array(231);
$ascii['d'] = array(208);
$ascii['n'] = array(241);
$ascii['y'] = array(253, 255);

foreach ($ascii as $key=>$item) {
	$acentos = '';
	foreach ($item AS $codigo) $acentos .= chr($codigo);
	$troca[$key] = '/['.$acentos.']/i';
}

$string = preg_replace(array_values($troca), array_keys($troca), $string);

// Slug?
if ($slug) {
	// Troca tudo que não for letra ou número por um caractere ($slug)
	$string = preg_replace('/[^a-z0-9]/i', $slug, $string);
	// Tira os caracteres ($slug) repetidos
	$string = preg_replace('/' . $slug . '{2,}/i', $slug, $string);
	$string = trim($string, $slug);
}

return $string;
}

 

Pra usá-la:

 

$string = "Olá, este é um test!";
$string = removeAcentos($string, "-");
echo $string;
// Saída, ola-este-e-um-teste
// Se estiver usando, utf-8, faça assim:
$string = utf8_decode("Olá, este é um test!");
$string = removeAcentos($string, "-");
echo $string;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wanderson, segui os passos e consegui. Mas queria tentar uma coisa:

 

atualmente estou usando o arquivo artigos.php para mostrar a lista de artigos e o arquivo artigo.php para mostrar o arquivo clicado. Como devo alterar o htaccess para que o artigo carregue dentro do arquivo artigos.php?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wanderson, segui os passos e consegui. Mas queria tentar uma coisa:

 

atualmente estou usando o arquivo artigos.php para mostrar a lista de artigos e o arquivo artigo.php para mostrar o arquivo clicado. Como devo alterar o htaccess para que o artigo carregue dentro do arquivo artigos.php?

 

A regra do teu .htaccess vai ser a seguinte:

 

RewriteRule ^artigos/([0-9]+)/([a-zA-Z0-9-]+)/?$ artigo.php?id=$1&slug=$2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da maneira que lhe apresentei, eu acho um forma pessoalmente melhor, pois você pega o id e o slug (url), e se você pega o id, é certeza de que o MySql não irá confundir o post, mas isto é uma forma pessoal, então faça da maneira que melhor lhe agrade.

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.