Foro PHPBB 3.2 con urls friendly

phpbb 3.2 urls friendlys

phpBB es una herramienta muy conocida para en poco tiempo disponer de un foro en internet. Tienes bastantes plugins aunque menos de los que a mi me gustaría. Lo primero que me encontré cuando instalé un php en el foro retro es que phpBB no admite urls amigables (urls friendly), con lo cual las urls son del estilo: viewforum.php?t=12, lo cual si no me equivoco no es bueno para SEO en general y para SEO de Google. He buscado mucho por internet y no he conseguido encontrar ningún tutorial donde expliquen cómo hacer un foro de phpBB url friendly y no sólo eso, no he encontrado ningún MOD de phpBB que lo haga automáticamente. Lo único que he encontrado son foros en los que dicen erróneamente que las url amigables no influyen en los resultados de google. Así que me he lanzado a la piscina para hacer mi foro url friendly. Tengo conocimientos de PHP pero nunca había tocado nada de phpBB, así que disculpad si no son perfectos los cambios. Lo que si os digo es que funcionan y gracias a ellos vuestro foro será url friendly. Por ejemplo en mi foro retro he conseguido tener estas urls:

https://www.loretrovuelve.com/foro-retro/muebles-recreativas-arcade-bart...

https://www.loretrovuelve.com/foro-retro/mandos-cpo-maquinas-recreativas...

https://www.loretrovuelve.com/mensaje-foro/comprar-kit-bartop/1

Cómo poner URLs friendly en un foro phpBB 3.2

En principio mis cambios valen para phpBB 3.2, en versiones anteriores de phpBB desconozco si funcionarán los cambios. Os pongo los pasos necesarios para que finalmente tengamos un foro con urls amigables:

Cómo modificar el .htaccess para tener urls amigables en nuestro foro phpBB 3.2

Deberemos modificar el .htaccess del raiz de nuestro site. Antes haremos una copia por si nos lo cargamos.

# Nos aseguramos de que estas dos lineas esten en el htaccess
<IfModule mod_rewrite.c>
RewriteEngine on

# Anyadimos estas lineas al htacces debajo de las anteriores
# Las dos lines siguientes no son del todo necesarioas, 
RewriteCond %{THE_REQUEST} \s/viewforum\.php\?f=([0-9]+)&nombre=([a-z0-9\-]+)\s [NC]
RewriteRule ^ /foro-retro/%2/%1? [R=301,L]
# Esta es totalmente necesaria, para convertir toda url amigable en formato antiguo y que sea capaz de interpretar los parametros el apache
RewriteRule ^foro-retro/[a-z0-9\-]+/([0-9]+)$ /viewforum.php?f=$1 [L]

# Esta es totalmente necesaria, para convertir toda url amigable en formato antiguo y que sea capaz de interpretar los parametros el apache
RewriteRule ^mensaje-foro/[a-z0-9\-]+/([0-9]+)$ /viewtopic.php?t=$1 [L]


# IMPORTANTE: he puesto "foro-retro"  para las categorias y "mensaje-foro" para los mensajes. Podeis escoger las cadenas que querais

Una vez cambiado el .htaccess nos toca cambiar los php para que las urls se transformen en amigables.

Cómo cambiar los PHP para adaptar phpBB 3.2 a url amigables

Creamos el archivo includes/functions_urls.php con este contenido

<?php
// Limpia la cadena para que la url sea amigable y sin caracteres ni palabras raras
function cleanCadena($cadena){
        $unwanted_words = array('en','la','los','de','del','las','el','desde','entre','por','y','o','para','tu','tus','sus','todas','todos','que','q','ke','a','mis','mi','un','unos','una','uno','este','esto','estas','estos','esta','no','se');
        foreach($unwanted_words as $key=>$word){
                $cadena = str_replace(" $word ",'-',$cadena);
                $cadena = str_replace("-$word ",'-',$cadena);
                $cadena = str_replace(" $word-",'-',$cadena);
        }
        $cadena = str_replace('-',' ',$cadena);
        $cadena = str_replace('   ',' ',$cadena);
        $cadena = str_replace('&amp;','-',$cadena);
        $unwanted_array = array('À'=>'A','Á'=>'A','Â'=>'A','Ã'=>'A','Ä'=>'A','Å'=>'A','Æ'=>'A','Ç'=>'C','È'=>'E','É'=>'E',
               'Ê'=>'E','Ë'=>'E','Ì'=>'I','Í'=>'I','Î'=>'I','Ï'=>'I','Ñ'=>'N','Ò'=>'O','Ó'=>'O','Ô'=>'O','Õ'=>'O','Ö'=>'O','Ø'=>'O','Ù'=>'U',
               'Ú'=>'U','Û'=>'U','Ü'=>'U','Ý'=>'Y','Þ'=>'B','ß'=>'Ss','à'=>'a','á'=>'a','â'=>'a','ã'=>'a','ä'=>'a','å'=>'a','æ'=>'a','ç'=>'c',
               'è'=>'e','é'=>'e','ê'=>'e','ë'=>'e','ì'=>'i','í'=>'i','î'=>'i','ï'=>'i','ð'=>'o','ñ'=>'n','ò'=>'o','ó'=>'o','ô'=>'o', 'õ'=>'o',
               'ö'=>'o','ø'=>'o','ù'=>'u','ú'=>'u','û'=>'u','ý'=>'y','þ'=>'b','ÿ'=>'y',' '=>'-',','=>'','/'=>'',':'=>'','?'=>'','¿'=>'',
               '¡'=>'','!'=>'','.'=>'','+'=>'');
        $cadena = strtolower(strtr( utf8_decode($cadena), $unwanted_array ));
        $cadena = str_replace('--','-',$cadena);
        return $cadena;
}
// Devuelve una url amigable de un foro
function getUrlForum($u_url,$name){
        return getUrlFriendly($u_url,$name,"forum");
}
// Devuelve una url amigable de un mensaje
function getUrlMensaje($u_url,$name){
        return getUrlFriendly($u_url,$name,"message");
}
// Devuelve una url amigable de un mensaje o un foro
function getUrlFriendly($u_url,$name,$type){
        switch($type){
                case 'forum': $view = "viewforum.php";$urlFriendly = "foro-retro";break;
                case 'message': $view = "viewtopic.php";$urlFriendly = "mensaje-foro";break;
                default:die("error en el type $type");break;
        }
        $title = cleanCadena($name);
        $u_url= str_replace("&amp;","&",$u_url);
        $i_pos = strpos($u_url,"?");
        $url = str_replace($view,$urlFriendly."/",substr($u_url,0,$i_pos));
        $a_params = explode("&", substr($u_url,$i_pos+1));
        foreach($a_params as $key=>$valor){
                $a_params2 = explode("=",$valor);
                if ($a_params2[0] == 't'|| $a_params2[0] == 'f'){
                        $param = $a_params2[1];
                }
        }
        return $url.$title.'/'.$param;
}
?>

Este archivo es el que modificará las urls que les pasemos para que sean friendlys. Para ello limpiará cada url de caracteres extraños y le concatenará la cadena que le pasemos como texto para url, es decir, si queremos que la url viewforum.php?t=2 se transforme en "mensaje-foro/comprar-consola/2 deberemos pasarle la url y el texto "comprar consola".

Ahora hay que cambiar todos los enlaces del foro phpBB para que antes de pintarse se transformen en formato url friendly. Las urls desgraciadamente se parsean en varios archivos, pero los tengo localizados todos... incluso el sitemap.xml. Con lo cual solo deberemos editar los archivos que os pongo debajo y sustituir las urls por una llamada a la función getUrlMensaje (en el caso de los mensajes) y getUrlForum (en el caso de las categorias de foro).

Cambiar archivos de phpBB 3.2 para adaptarlos a las urls friendly

La lista de archivos a tocar es esta, como veréis es corta, pero hay que tocar en varios sitios, los pondré un poco más abajo:

// Para el sitemap (si tuvieramos el plugin de sitemap)
ext/shredder/sitemap/core.php

// Para el foro
includes/functions_display.php
viewforum.php

Al ser la lista de archivos a tocar muy reducida, si en algún momento actualizamos a alguna versión superior de phpBB podremos tener los cambios controlados, sabiendo que solo hay que tocar en esos 2 archivos

Lo primero que hay que hacer es editar ambos archivos e inclur el php que hemos creado antes:

// Siendo RUTA la ruta de directorio donde esta el archivo
include(RUTA."functions_urls.php");

Ahora en el archivo functions_display.php hay que sustituir todas las lineas que pone 'U_VIEWFORM' por la llamada a nuestra funcion de getUrlForum:

// La linea donde ponga:
'U_VIEWFORUM'           => $u_viewforum;

// Pondremos esto
'U_VIEWFORUM'           => getUrlForum($u_viewforum,$row['forum_name']);,

// La linea donde ponga
'U_VIEWFORUM'                   => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']),

// Pondremos esto
'U_VIEWFORUM'                   => getUrlForum(append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']),$row['forum_name']),

En el archivo viewforum.php también hay que sustituir

// En la linea donde pone
'U_VIEW_TOPIC'                  => $view_topic_url,

// Sustituirlo por
'U_VIEW_TOPIC'                  => getUrlMensaje($view_topic_url,censor_text($row['topic_title'])),

En el archivo del sitemap: ext/shredder/sitemap/core.php habra que hacer algo parecido.

// En la linea que pone
$f_url = $this->path . "viewforum.$this->php_ext?f=$f_id";

// hay que sustituirlo por
$f_url = $this->path . getUrlForum("viewforum.$this->php_ext?f=$f_id",$forums[$f_id]['forum_name']);

// En la linea que pone
$t_url = $this->path . "viewtopic.$this->php_ext?" . $f_part . "t=$t_id";

// hay que sustituirlo por
$t_url = $this->path . getUrlMensaje("viewtopic.$this->php_ext?" . $f_part . "t=$t_id",$data['topic_title']);

Una vez hechos estos cambios en los archivos ya tendremos nuestro foro phpBB adaptado a SEO con urls friendly en lugar de urls con parámetros feos.

Si te gusta este tutorial compártelo en redes sociales o enlázalo en tu web

Votos totales: 57