Autor: Trotador
E-mail: [email protected]
Fonte: www.gbunix.com
Mantenha o documento completo e indique a fonte ao reimprimir.
Prefácio
À medida que o conteúdo na Internet cresce a um ritmo alarmante, a importância dos motores de busca ganha cada vez mais destaque. Se um site pretende ser melhor indexado pelos motores de busca, além de ser user-friendly (User Friendly), o. o design do site também deve ser amigável aos mecanismos de pesquisa. O design do (Search Engine Friendly) também é muito importante. Quanto mais conteúdo da página entrar no mecanismo de busca, maior será a chance de ser encontrado por usuários que utilizem palavras-chave diferentes. Devo admitir que reescrever links dinâmicos da web em links estáticos é a maneira mais segura e estável de otimizar os mecanismos de pesquisa. Esta solução é proposta para o redirecionamento de URL do sistema de fóruns do phpBB.
O redirecionamento de URLda solução
pode ser tecnicamente implementado de duas maneiras: uma é baseada na reescrita de URL e a outra é baseada em PATH_INFO. Por exemplo, http://www.gbunix.com/bbs/ftopic102.html é implementado com base na reescrita e http://www.gbunix.com/article/article.php/515 é implementado com base em PATH_INFO.
Para a transformação do fórum PHPBB, apresentaremos essas duas tecnologias respectivamente.
1. Implementação usando tecnologia de reescrita:
Modifique o código phpBB:
Abra o arquivo /includes/page_header.php e
procure o código:
//
//Gerar status de logado/desconectado
//
Adiciona antes:
ob_start();
função substituir_for_mod_rewrite(&$s)
{
$urlin =
variedade(
"'(?<!/)viewforum.php?f=([0-9]*)&topicdays=([0-9]*)&start=([0-9]*)'",
"'(?<!/)viewforum.php?f=([0-9]*)&mark=topics'",
"'(?<!/)viewforum.php?f=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)&view=anterior'",
"'(?<!/)viewtopic.php?t=([0-9]*)&view=próximo'",
"'(?<!/)viewtopic.php?t=([0-9]*)&postdays=([0-9]*)&postorder=([a-zA-Z]*)& ;iniciar=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)&start=([0-9]*)&postdays=([0-9]*)&postorder =([a-zA-Z]*)&destaque=([a-zA-Z0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)start=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)'",
"'(?<!/)viewtopic.php&p=([0-9]*)'",
"'(?<!/)viewtopic.php?p=([0-9]*)'",
);
$urlout = array(
"viewforum\1-\2-\3.html",
"fórum\1.html",
"fórum\1.html",
"ptopic\1.html",
"ntopic\1.html",
"ftopic\1-\2-\3-\4.html",
"ftopic\1.html",
"ftopic\1-\2.html",
"ftopic\1.html",
"sutra\1.html",
"sutra\1.html",
);
$s = preg_replace($urlin, $urlout, $s);
retornar $s;
}
Abra o arquivo /includes/page_tail.php e
procure o código:
$db->sql_close()
e adicione:
$contents = ob_get_contents();
ob_end_clean();
echo replace_for_mod_rewrite($conteúdo);
global $dbg_starttime;
Se o seu phpBB for a versão 2.06, abra o arquivo include/functions.php e
procure pelo código:
if (!empty($db))
{
$db->sql_close();
}
:
if (stristr($url, 'http://')) {
header('Localização: '. $url);
saída;
}
Finalmente crie o arquivo .htaccess no diretório bbs. O conteúdo do arquivo é:
RewriteEngine On.
RewriteRule ^forums.* index.php
RewriteRule ^forum([0-9]*).* viewforum.php?f=$1&mark=topic
RewriteRule ^viewforum([0-9]*)-([0-9]*)-([0-9]*).* viewforum.php?f=$1&topicdays=$2&start=$3
RewriteRule ^forum([0-9]*).* viewforum.php?f=$1
RewriteRule ^ptopic([0-9]*).* viewtopic.php?t=$1&view=previous
RewriteRule ^ntopic([0-9]*).* viewtopic.php?t=$1&view=next
RewriteRule ^ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* viewtopic.php?t=$1&postdays =$2&postorder=$3&start=$4
ReescreverRule ^ftopic([0-9]*)-([0-9]*).* viewtopic.php?t=$1&start=$2
RewriteRule ^ftopic([0-9]*).* viewtopic.php?t=$1
RewriteRule ^ftopic([0-9]*).html viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
RewriteRule ^sutra([0-9]*).* viewtopic.php?p=$1
Se o seu servidor não suporta .htaccess, abra o arquivo httpd.conf e edite sua parte do host virtual da seguinte forma:
<VirtualHost 1.2.3.4 >
ServerAdmin webmaster@domínio.com
DocumentRoot /home1/ftp/trotter/www
Nome do servidor www.gbunix.com
RewriteEngineOn
RewriteRule ^/bbs/forums.* /bbs/index.php
RewriteRule ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1&mark=topic
RewriteRule ^/bbs/viewforum([0-9]*)-([0-9]*)-([0-9]*).* /bbs/viewforum.php?f=$1&topicdays=$2&start=$3
RewriteRule ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1
RewriteRule ^/bbs/ptopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=previous
RewriteRule ^/bbs/ntopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=next
RewriteRule ^/bbs/ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* /bbs/viewtopic. php?t=$1&postdays=$2&postorder=$3&start=$4
RewriteRule ^/bbs/ftopic([0-9]*)-([0-9]*).* /bbs/viewtopic.php?t=$1&start=$2
RewriteRule ^/bbs/ftopic([0-9]*).* /bbs/viewtopic.php?t=$1
RewriteRule ^/bbs/ftopic([0-9]*).html /bbs/viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
RewriteRule ^/bbs/sutra([0-9]*).* /bbs/viewtopic.php?p=$1
Logs do Log de erros/gbunix.com-error_log
Logs CustomLog/gbunix.com-access_log combinados
</VirtualHost>
Se você não estiver usando um host virtual, basta colocar a parte RewriteRule do código no final do arquivo httpd.conf.
Nota: É muito importante que para a segurança do sistema, crie o arquivo robots.txt no diretório de lançamento do bbs. O conteúdo do arquivo é o seguinte:
Disallow: /your-forum-folder/sutra*.html$.
Não permitir: /sua-pasta-do-fórum/ptopic*.html$
Não permitir: /sua-pasta-do-fórum/ntopic*.html$
Não permitir: /your-forum-folder/ftopic*asc*.html$
Instale o módulo mod_rewrite para o apache
Se o seu servidor apache não foi instalado, é muito simples compilar o módulo mod_rewrite nele ao compilar o apache. pode ser encontrado em Found em www.gbunix.com . Se o seu apache foi instalado e agora você deseja apenas compilar o módulo mod_rewrite.so e carregá-lo no apache, apresentaremos este método a seguir.
Tomemos como exemplo o sistema operacional Solaris:
# PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH
# exportar PATH
# qual gcc
# which make
# find ./ -name mod_rewrite.c //Procure o arquivo mod_rewrite.c no diretório de instalação do apache
# cd PATH/to/mod_rewrite.c //Insira o diretório que contém o arquivo mod_rewrite.c
# apxs -c mod_foo.c //Especifique o caminho absoluto para apxs, no diretório bin onde você está usando o apache atualmente
# apxs -i -a -n mod_rewrite mod_rewrite.la
Se não houver erros, um arquivo mod_rewrite.so deve ser compilado no diretório de módulos do seu apache.
Edite o arquivo httpd.conf e confirme se httpd.conf já contém a instrução de carregamento de mod_rewrite.so, como segue:
LoadModule rewrite_module module/mod_rewrite.so
Neste momento, seu apache já deve suportar rewrite.
2. Implementação baseada na tecnologia PATH_INFO:
Modifique o código phpBB:
Abra o arquivo global_header.tpl e adicione o seguinte código na primeira linha:
<base href=" http://www.your-forum.com/forum-dir/ ">
Abra o arquivo config.php, adicione o seguinte código antes de ?>:
if ($REQUEST_METHOD == "GET") {
if (strlen(getenv('PATH_INFO')) > 1) {
$GET_array = array();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = explode('/', substr(getenv('PATH_INFO'), 1));
for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$GET_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} outro {
$HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
}
$eu++;
}
if (tamanho($GET_array) > 0) {
while (lista($chave, $valor) = cada($GET_array)) {
$HTTP_GET_VARS[$chave] = $valor;
}
}
}
}
if ($REQUEST_METHOD == "POST") {
if (strlen(getenv('PATH_INFO')) > 1) {
$POST_array=array();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = explode('/', substr(getenv('PATH_INFO'), 1));
for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$POST_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} outro {
$HTTP_POST_VARS[$vars[$i]] = $vars[$i+1];
}
$eu++;
}
if (tamanho($GET_array) > 0) {
while (lista($chave, $valor) = cada($POST_array)) {
$HTTP_POST_VARS[$chave] = $valor;
}
}
}
}
Abra o arquivo functions.php e adicione o seguinte código antes de ?>:
function replace_for_mod_rewrite($s) {
$s = str_replace("?", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=", "/", $s);
return $s;
}
Abra o arquivo session.php e substitua a funçãoappend_sid() originalmente definida pelo seguinte código:
functionappend_sid($url, $non_html_amp = false)
{
global $SID;
if ( !empty($SID) && !preg_match('#sid=#', $url) && !preg_match('#sid/#', $url) && !stristr( $_SERVER["HTTP_USER_AGENT"] ,'bot ') && !stristr($_SERVER["HTTP_USER_AGENT"] ,'inktomi'))
{
$url .= ( ( strpos($url, '?') != false ) ? ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) .
}
$url=replace_for_mod_rewrite($url);
retornar $url;
}
Neste momento, a URL do seu fórum será mapeada para ( http://www.domain/bbs/viewtopic.php/t/4 ).
Referências: