Auteur : Trotteur
Courriel : [email protected]
Source : www.gbunix.com
Veuillez conserver le document complet et indiquer la source lors de la réimpression.
Préface
Alors que le contenu sur Internet augmente à un rythme alarmant, l'importance des moteurs de recherche est devenue de plus en plus importante. Si un site Web veut être mieux indexé par les moteurs de recherche, en plus d'être convivial (User Friendly), le La conception du site Web doit également être adaptée aux moteurs de recherche. La conception (Search Engine Friendly) est également très importante. Plus le contenu de la page entre dans le moteur de recherche, plus grandes sont les chances d'être trouvé par les utilisateurs utilisant des mots-clés différents. Je dois admettre que la réécriture de liens Web dynamiques en liens statiques est le moyen le plus sûr et le plus stable d'optimiser les moteurs de recherche. Cette solution est proposée pour la redirection d'URL du système de forum phpBB.
La redirection d'URLde solution
peut techniquement être implémentée de deux manières, l'une basée sur la réécriture d'URL et l'autre basée sur PATH_INFO. Par exemple, http://www.gbunix.com/bbs/ftopic102.html est implémenté sur la base d'une réécriture, et http://www.gbunix.com/article/article.php/515 est implémenté sur la base de PATH_INFO.
Pour la transformation du forum PHPBB, nous présenterons respectivement ces deux technologies.
1. Implémentation utilisant la technologie de réécriture :
Modifier le code phpBB :
Ouvrez le fichier /includes/page_header.php et
recherchez le code :
//
// Générer le statut de connexion/déconnexion
//
Ajouter avant :
ob_start();
fonction replace_for_mod_rewrite(&$s)
{
$urlin =
tableau(
"'(?<!/)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=previous'",
"'(?<!/)viewtopic.php?t=([0-9]*)&view=next'",
"'(?<!/)viewtopic.php?t=([0-9]*)&postdays=([0-9]*)&postorder=([a-zA-Z]*)& ;start=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)&start=([0-9]*)&postdays=([0-9]*)&postorder =([a-zA-Z]*)&highlight=([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 = tableau(
"viewforum\1-\2-\3.html",
"forum\1.html",
"forum\1.html",
"ptopic\1.html",
"topic\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);
retourner $s ;
}
Ouvrez le fichier /includes/page_tail.php et
recherchez le code :
$db->sql_close()
puis ajoutez :
$contents = ob_get_contents();
ob_end_clean();
echo replace_for_mod_rewrite($contents);
global $dbg_starttime;
Si votre phpBB est en version 2.06, ouvrez le fichier include/functions.php et
recherchez le code :
if (!empty($db))
{
$db->sql_close();
}
:
if (stristr($url, 'http://')) {
header('Emplacement : ' . $url);
sortie;
}
Enfin, créez le fichier .htaccess dans le répertoire bbs. Le contenu du fichier est :
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$&postcommande=3$&start=4$
RewriteRule ^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
Si votre serveur ne prend pas en charge .htaccess, veuillez ouvrir le fichier httpd.conf et modifier votre partie hôte virtuel comme suit :
<VirtualHost 1.2.3.4 >
Administrateur du serveur [email protected]
DocumentRoot /home1/ftp/trotter/www
Nom du serveur www.gbunix.com
Réécriture du moteur activé
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
Journaux ErrorLog/gbunix.com-error_log
Journaux CustomLog/gbunix.com-access_log combinés
</VirtualHost>
Si vous n'utilisez pas d'hôte virtuel, placez simplement la partie RewriteRule du code à la fin du fichier httpd.conf.
Remarque : Il est très important, pour la sécurité du système, de créer le fichier robots.txt dans le répertoire de version bbs. Le contenu du fichier est le suivant :
Interdire : /your-forum-folder/sutra*.html$.
Interdire : /votre-dossier-forum/ptopic*.html$
Interdire : /votre-dossier-forum/ntopic*.html$
Interdire : /your-forum-folder/ftopic*asc*.html$
Installez le module mod_rewrite pour Apache.
Si votre serveur Apache n'a pas été installé, c'est très simple. Compilez-y simplement le module mod_rewrite lors de la compilation des documents associés. peut être trouvé sur Found at www.gbunix.com . Si votre Apache a été installé et que vous souhaitez maintenant simplement compiler le module mod_rewrite.so et le charger dans Apache, nous présenterons cette méthode ci-dessous.
Prenons l'exemple du système d'exploitation Solaris :
# PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH
# exporter CHEMIN
# quel gcc
# ce qui fait
# find ./ -name mod_rewrite.c //Recherchez le fichier mod_rewrite.c dans le répertoire d'installation d'Apache
# cd PATH/to/mod_rewrite.c //Entrez le répertoire contenant le fichier mod_rewrite.c
# apxs -c mod_foo.c //Veuillez spécifier le chemin absolu pour apxs, dans le répertoire bin où vous utilisez actuellement Apache
# apxs -i -a -n mod_rewrite mod_rewrite.la
S'il n'y a aucune erreur, un fichier mod_rewrite.so doit être compilé dans le répertoire modules de votre apache.
Modifiez le fichier httpd.conf et confirmez que httpd.conf contient déjà l'instruction de chargement de mod_rewrite.so, comme suit :
LoadModule rewrite_module modules/mod_rewrite.so
À ce stade, votre Apache devrait déjà prendre en charge la réécriture.
2. Implémentation basée sur la technologie PATH_INFO :
Modifier le code phpBB :
Ouvrez le fichier global_header.tpl et ajoutez le code suivant à la première ligne :
<base href=" http://www.your-forum.com/forum-dir/ ">
Ouvrez le fichier config. php, ajoutez le code suivant avant ?> :
if ($REQUEST_METHOD == "GET") {
if (strlen(getenv('PATH_INFO')) > 1) {
$GET_array = tableau();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = éclater('/', substr(getenv('PATH_INFO'), 1));
pour ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$GET_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} autre {
$HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
}
$i++;
}
si (sizeof($GET_array) > 0) {
while (list($key, $value) = each($GET_array)) {
$HTTP_GET_VARS[$key] = $valeur ;
}
}
}
}
si ($REQUEST_METHOD == "POST") {
if (strlen(getenv('PATH_INFO')) > 1) {
$POST_array = tableau();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = éclater('/', substr(getenv('PATH_INFO'), 1));
pour ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$POST_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} autre {
$HTTP_POST_VARS[$vars[$i]] = $vars[$i+1];
}
$i++;
}
si (sizeof($GET_array) > 0) {
while (list($key, $value) = each($POST_array)) {
$HTTP_POST_VARS[$key] = $valeur ;
}
}
}
}
Ouvrez le fichier function.php et ajoutez le code suivant avant ?> :
function replace_for_mod_rewrite($s) {
$s = str_replace("?", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=", "/", $s);
return $s;
}
Ouvrez le fichier sessions.php et remplacez la fonction append_sid() initialement définie par le code suivant :
function append_sid($url, $non_html_amp = false)
{
$SID global ;
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 ) ? '&' : '&' ) : '?' ) $SID ;
}
$url=replace_for_mod_rewrite($url);
renvoyer $url ;
}
À ce stade, l'URL de votre forum sera mappée à ( http://www.domain/bbs/viewtopic.php/t/4 ).
Références :