Autor: Trotter
E-Mail: [email protected]
Quelle: www.gbunix.com
Bitte halten Sie das Dokument vollständig und geben Sie beim Nachdruck die Quelle an.
Vorwort
Da die Inhalte im Internet in besorgniserregendem Tempo wachsen, wird die Bedeutung von Suchmaschinen immer wichtiger. Wenn eine Website nicht nur benutzerfreundlich (User Friendly), sondern auch besser indiziert werden soll Das Design einer Website muss auch suchmaschinenfreundlich sein. Je mehr Seiteninhalte in die Suchmaschine gelangen, desto größer ist die Chance, von Nutzern mit unterschiedlichen Schlüsselwörtern gefunden zu werden. Ich muss zugeben, dass das Umschreiben dynamischer Weblinks in statische Links der sicherste und stabilste Weg ist, Suchmaschinen zu optimieren. Diese Lösung wird für die URL-Umleitung des phpBB-Forumsystems vorgeschlagen.
Die URL-Umleitungder Lösung
kann technisch auf zwei Arten implementiert werden: Die eine basiert auf der URL-Umschreibung und die andere auf PATH_INFO. Beispielsweise wird http://www.gbunix.com/bbs/ftopic102.html basierend auf Rewrite implementiert, und http://www.gbunix.com/article/article.php/515 wird basierend auf PATH_INFO implementiert.
Für die Transformation des PHPBB-Forums werden wir diese beiden Technologien jeweils einführen.
1. Implementierung mithilfe der Rewrite-Technologie:
Ändern Sie den phpBB-Code:
Öffnen Sie die Datei /includes/page_header.php und
suchen Sie nach dem Code:
//
//Angemeldeten/abgemeldeten Status generieren
//
Vorher hinzufügen:
ob_start();
Funktion replace_for_mod_rewrite(&$s)
{
$urlin =
Array(
"'(?<!/)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 = array(
"viewforum\1-\2-\3.html",
"forum\1.html",
"forum\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);
return $s;
}
Öffnen Sie die Datei /includes/page_tail.php und
suchen Sie nach dem Code:
$db->sql_close();
und fügen Sie dann hinzu:
$contents = ob_get_contents();
ob_end_clean();
echo replace_for_mod_rewrite($contents);
global $dbg_starttime;
Wenn Ihr phpBB Version 2.06 ist, öffnen Sie die Datei Includes/functions.php und
suchen Sie nach dem Code:
if (!empty($db))
{
$db->sql_close();
}
hinzufügen:
if (stristr($url, 'http://')) {
header('Standort: ' . $url);
Ausfahrt;
}
Erstellen Sie abschließend die .htaccess-Datei im BBS-Verzeichnis. Der Dateiinhalt lautet:
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
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
Wenn Ihr Server .htaccess nicht unterstützt, öffnen Sie bitte die Datei httpd.conf und bearbeiten Sie Ihren virtuellen Host-Teil wie folgt:
<VirtualHost 1.2.3.4 >
ServerAdmin [email protected]
DocumentRoot /home1/ftp/trotter/www
Servername 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
ErrorLog logs/gbunix.com-error_log
CustomLog logs/gbunix.com-access_log kombiniert
</VirtualHost>
Wenn Sie keinen virtuellen Host verwenden, fügen Sie einfach den RewriteRule-Teil des Codes am Ende der Datei httpd.conf ein.
Hinweis: Für die Sicherheit des Systems ist es sehr wichtig, dass Sie die Datei robots.txt im BBS-Release-Verzeichnis erstellen. Der Dateiinhalt lautet wie folgt:
Disallow: /your-forum-folder/sutra*.html$
Nicht zulassen: /your-forum-folder/ptopic*.html$
Nicht zulassen: /your-forum-folder/ntopic*.html$
Nicht zulassen: /your-forum-folder/ftopic*asc*.html$
Installieren Sie das mod_rewrite-Modul für Apache.
Wenn Ihr Server-Apache nicht installiert ist, ist es sehr einfach, das mod_rewrite-Modul beim Kompilieren von Apache zu kompilieren finden Sie unter www.gbunix.com . Wenn Ihr Apache installiert wurde und Sie jetzt nur noch das Modul mod_rewrite.so kompilieren und in Apache laden möchten, stellen wir Ihnen diese Methode im Folgenden vor.
Nehmen Sie als Beispiel das Betriebssystem Solaris:
# PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH
# PFAD exportieren
# which gcc
# which make
# find ./ -name mod_rewrite.c //Suchen Sie im Apache-Installationsverzeichnis nach der Datei mod_rewrite.c
# cd PATH/to/mod_rewrite.c //Geben Sie das Verzeichnis ein, das die Datei mod_rewrite.c enthält
# apxs -c mod_foo.c //Bitte geben Sie den absoluten Pfad für apxs im Bin-Verzeichnis an, in dem Sie Apache derzeit verwenden
# apxs -i -a -n mod_rewrite mod_rewrite.la
Wenn keine Fehler vorliegen, sollte eine mod_rewrite.so-Datei im Modulverzeichnis Ihres Apache kompiliert werden.
Bearbeiten Sie die Datei httpd.conf und bestätigen Sie, dass httpd.conf bereits die Ladeanweisung von mod_rewrite.so enthält, wie folgt:
LoadModule rewrite_module module/mod_rewrite.so
Zu diesem Zeitpunkt sollte Ihr Apache bereits Rewrite unterstützen.
2. Implementierung basierend auf der PATH_INFO-Technologie:
Ändern Sie den phpBB-Code:
Öffnen Sie die Datei Overall_header.tpl und fügen Sie den folgenden Code in die erste Zeile ein:
<base href=" http://www.your-forum.com/forum-dir/ ">
Öffnen Sie die config. php-Datei und fügen Sie vor ?> den folgenden Code hinzu:
if ($REQUEST_METHOD == "GET") {
if (strlen(getenv('PATH_INFO')) > 1) {
$GET_array = array();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = explosion('/', 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];
} anders {
$HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
}
$i++;
}
if (sizeof($GET_array) > 0) {
while (list($key, $value) = every($GET_array)) {
$HTTP_GET_VARS[$key] = $value;
}
}
}
}
if ($REQUEST_METHOD == "POST") {
if (strlen(getenv('PATH_INFO')) > 1) {
$POST_array = array();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = explosion('/', 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];
} anders {
$HTTP_POST_VARS[$vars[$i]] = $vars[$i+1];
}
$i++;
}
if (sizeof($GET_array) > 0) {
while (list($key, $value) = every($POST_array)) {
$HTTP_POST_VARS[$key] = $value;
}
}
}
}
Öffnen Sie die Datei „functions.php“ und fügen Sie vor ?> den folgenden Code hinzu:
function replace_for_mod_rewrite($s) {
$s = str_replace("?", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=", "/", $s);
return $s;
}
Öffnen Sie die Datei session.php und ersetzen Sie die ursprünglich definierte Funktion append_sid() durch den folgenden Code:
function append_sid($url, $non_html_amp = false)
{
globale $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);
return $url;
}
Zu diesem Zeitpunkt wird Ihre Forum-URL zugeordnet ( http://www.domain/bbs/viewtopic.php/t/4 ).
Referenzen: