Автор: Троттер
Электронная почта: [email protected]
Источник: www.gbunix.com
Пожалуйста, сохраняйте документ полностью и указывайте источник при перепечатке.
Предисловие
Поскольку контент в Интернете растет с угрожающей скоростью, важность поисковых систем становится все более заметной. Если веб-сайт хочет быть лучше индексируемым поисковыми системами, помимо того, что он удобен для пользователя (User Friendly), он должен быть более удобным для пользователя. Дизайн веб-сайта также должен быть дружественным для поисковых систем. Дизайн (дружественный для поисковых систем) также очень важен. Чем больше контента страницы попадает в поисковую систему, тем больше шансов, что ее найдут пользователи, использующие разные ключевые слова. Я должен признать, что перезапись динамических веб-ссылок в статические — самый безопасный и стабильный способ оптимизации поисковых систем. Это решение предлагается для перенаправления URL-адресов форумной системы phpBB.
Перенаправление URL-адресоврешения
технически может быть реализовано двумя способами: один основан на перезаписи URL-адресов, а другой — на PATH_INFO. Например, http://www.gbunix.com/bbs/ftopic102.html реализуется на основе перезаписи, а http://www.gbunix.com/article/article.php/515 реализуется на основе PATH_INFO.
Для трансформации форума PHPBB мы представим эти две технологии соответственно.
1. Реализация с использованием технологии перезаписи:
Изменить код phpBB:
Откройте файл /includes/page_header.php и
найдите код:
//
//Сгенерируем статус входа/выхода
//
Добавить перед:
ob_start();
функция replace_for_mod_rewrite(&$s)
{
$урлин =
множество(
"'(?<!/)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 = массив(
"viewforum\1-\2-\3.html",
"форум\1.html",
"форум\1.html",
"ptopic\1.html",
"ntopic\1.html",
"ftopic\1-\2-\3-\4.html",
"ftopic\1.html",
"ftopic\1-\2.html",
"ftopic\1.html",
"сутра\1.html",
"сутра\1.html",
);
$s = preg_replace($urlin, $urlout, $s);
вернуть $s;
}
Откройте файл /includes/page_tail.php и
найдите код:
$db->sql_close(),
а затем добавьте:
$contents = ob_get_contents();
ob_end_clean();
эхо replace_for_mod_rewrite($contents);
global $dbg_starttime;
Если ваш phpBB версии 2.06, откройте файл include/functions.php и
найдите код:
if (!empty($db))
{
$db->sql_close();
}
:
if (stristr($url, 'http://')) {
заголовок ('Местоположение:' . $url);
Выход;
}
Наконец, создайте файл .htaccess в каталоге bbs. Содержимое файла:
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
Если ваш сервер не поддерживает .htaccess, откройте файл httpd.conf и отредактируйте часть виртуального хоста следующим образом:
<VirtualHost 1.2.3.4 >
Администратор сервера [email protected]
DocumentRoot /home1/ftp/trotter/www
Имя сервера 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/gbunix.com-error_log
Журналы CustomLog/gbunix.com-access_log вместе взятые
</VirtualHost>
Если вы не используете виртуальный хост, просто поместите часть кода RewriteRule в конец файла httpd.conf.
Примечание. Для обеспечения безопасности системы очень важно создать файл robots.txt в каталоге выпуска bbs. Содержимое файла следующее:
Disallow: /your-forum-folder/sutra*.html$.
Запретить: /ваша-папка-форума/ptopic*.html$
Запретить: /ваша-папка-форума/ntopic*.html$
Disallow: /your-forum-folder/ftopic*asc*.html$
Установите модуль mod_rewrite для apache.
Если на вашем сервере не установлен apache, просто скомпилируйте в него модуль mod_rewrite при компиляции apache. можно найти на сайте Found на www.gbunix.com . Если ваш Apache установлен и теперь вы просто хотите скомпилировать модуль mod_rewrite.so и загрузить его в Apache, мы представим этот метод ниже.
В качестве примера возьмем операционную систему Solaris:
# PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH
# экспортировать ПУТЬ
# какой gcc
# которые делают
# find ./ -name mod_rewrite.c //Ищем файл mod_rewrite.c в каталоге установки apache
# cd PATH/to/mod_rewrite.c //Введите каталог, содержащий файл mod_rewrite.c
# apxs -c mod_foo.c //Укажите абсолютный путь для apxs в каталоге bin, где вы сейчас используете Apache
# apxs -i -a -n mod_rewrite mod_rewrite.la
Если ошибок нет, файл mod_rewrite.so должен быть скомпилирован в каталоге модулей вашего Apache.
Отредактируйте файл httpd.conf и убедитесь, что httpd.conf уже содержит оператор загрузки mod_rewrite.so следующим образом:
LoadModule rewrite_module elements/mod_rewrite.so
На данный момент ваш Apache уже должен поддерживать перезапись.
2. Реализация на основе технологии PATH_INFO:
Измените код phpBB:
Откройте файл common_header.tpl и добавьте в первую строку следующий код:
<base href=" http://www.your-forum.com/forum-dir/ ">
Откройте файл config. php, добавьте следующий код перед ?>:
if ($REQUEST_METHOD == "GET") {
если (strlen(getenv('PATH_INFO')) > 1) {
$GET_array = массив();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = взорвать('/', 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];
} еще {
$HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
}
$я++;
}
если (sizeof($GET_array) > 0) {
while (список($ключ, $значение) = каждый($GET_array)) {
$HTTP_GET_VARS[$key] = $value;
}
}
}
}
if ($REQUEST_METHOD == "POST") {
если (strlen(getenv('PATH_INFO')) > 1) {
$POST_array = массив();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = взорвать('/', 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];
} еще {
$HTTP_POST_VARS[$vars[$i]] = $vars[$i+1];
}
$я++;
}
если (sizeof($GET_array) > 0) {
while (список($key, $value) = каждый($POST_array)) {
$HTTP_POST_VARS[$key] = $value;
}
}
}
}
Откройте файл function.php и перед ?> добавьте следующий код:
function replace_for_mod_rewrite($s) {
$s = str_replace("?", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=", "/", $s);
return $s
}
Откройте файл session.php и замените первоначально определенную функцию add_sid() следующим кодом:
function Append_sid($url, $non_html_amp = false)
{
глобальный $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);
вернуть $url;
}
На этот раз URL-адрес вашего форума будет сопоставлен с ( http://www.domain/bbs/viewtopic.php/t/4 ).
Ссылки: