Google 向け PHPBB MOD の完全なソリューション
- WBOYオリジナル
- 2016-06-21 08:59:47866ブラウズ
著者: Trotter
メール: trotter@kekerde.net
出典: www.gbunix.com
文書を完全なものにし、再版する場合は出典を明記してください。
はじめに
インターネット上のコンテンツが驚くべき速度で増加するにつれて、Web サイトが検索エンジンによってより適切にインデックス付けされることを望む場合、検索エンジンの重要性がますます顕著になります。ウェブサイトのデザインへ ユーザーフレンドリー(User Friendly)に加えて、検索エンジンに優しい(Search Engine Friendly)デザインも非常に重要です。検索エンジンに入力されるページ コンテンツが多ければ多いほど、さまざまなキーワードを使用しているユーザーが見つけられる可能性が高くなります。動的 Web リンクを静的リンクに書き換えることが、検索エンジンを最適化する最も安全で安定した方法であることを認めざるを得ません。このソリューションは、phpBB フォーラム システムの URL リダイレクト用に提案されています。
解決策
技術的には、URL リダイレクトは 2 つの方法で実装できます。1 つは URL 書き換えに基づく方法、もう 1 つは PATH_INFO に基づく方法です。たとえば、http://www.gbunix.com/bbs/ftopic102.html はリライトに基づいて実装され、http://www.gbunix.com/article/article.php/515 は PATH_INFO に基づいて実装されます。
PHPBB フォーラムの変革に関して、これら 2 つのテクノロジーをそれぞれ紹介します。
1. 書き換えテクノロジーを使用して以下を実行します。
phpBB コードを変更します。
/includes/page_header.php ファイルを開き、
コードを検索します。
//
// ログイン/ログアウト状態を生成します
//
の前に次を追加します:
ob_start()
function replace_for_mod_rewrite( &$s )
{
$urlin =
array(
"'(?"(? "'(?"'(?"'(?"'(? "'(?"'(?"'(? "'( ?"'(?);
$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;
}
/includes/ を開きますpage_tail.php ファイル、
検索コード:
$db->sql_close();
の後に追加:
$contents = ob_get_contents() ;
ob_end_clean();
echo replace_for_mod_rewrite($contents);
global $dbg_starttime;
phpBB がバージョン 2.06 の場合は、includes/functions.php ファイルを検索します。 >
コード:
if (!empty($db))
{
$db->sql_close();
}
の後に次を追加します。
if (stristr($url, 'http://')) {
header('Location: ' . $url)
exit; >最後に bbs で .htaccess ファイルをディレクトリに作成します。ファイルの内容は次のとおりです。 ).* 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>
ServerAdmin
webmaster@domain.com
DocumentRoot /home1/ftp/trotter/www
ServerName
www.gbunix.com
RewriteEngine オン
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 を組み合わせた
仮想ホストを使用していない場合は、コードの RewriteRule 部分を httpd.conf ファイルの最後に置くだけです。
注: システムのセキュリティのため、bbs リリース ディレクトリに robots.txt ファイルを作成することが非常に重要です。ファイルの内容は次のとおりです:
Disallow: /your。 -forum-folder/sutra *.html$
禁止: /your-forum-folder/ptopic*.html$
禁止: /your-forum-folder/ntopic*.html$
禁止: / your-forum-folder/ ftopic*asc*.html$
Apache 用の mod_rewrite モジュールをインストールします
サーバーに Apache がインストールされていない場合、mod_rewrite モジュールをコンパイルするだけで非常に簡単です。関連ドキュメントは、www.gbunix.com で参照できます。 Apache がインストールされており、mod_rewrite.so モジュールをコンパイルして Apache にロードしたい場合は、以下でこの方法を紹介します。
Solaris オペレーティング システムを例に挙げます。
# PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH
# import PATH
# what gcc
# that make
# find ./ -name mod_rewrite.c //Apache インストール ディレクトリで mod_rewrite.c ファイルを探します
# cd PATH /to/ mod_rewrite.c // mod_rewrite.c ファイルを含むディレクトリを入力してください
# apxs -c mod_foo.c // 現在 Apache を使用している bin ディレクトリ内の apxs の絶対パスを指定してください
# apxs -i -a -n mod_rewrite mod_rewrite.la
エラーがない場合は、mod_rewrite.so ファイルが Apache の module ディレクトリにコンパイルされるはずです。
httpd.conf ファイルを編集し、次のように httpd.conf に mod_rewrite.so の読み込みステートメントが既に含まれていることを確認します。
LoadModule rewrite_module modules/mod_rewrite.so
この時点で、Apache はすでに書き換えをサポートしているはずです。
2. PATH_INFO テクノロジーに基づく実装:
phpBB コードを変更します:
overall_header.tpl ファイルを開き、最初の行に次のコードを追加します。
config.php ファイルを開き、?> の前に次のコードを追加します。
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)); =0, $n= sizeof($vars); $iif (strpos($vars[$i], '[]')) {
$GET_array[substr] ($vars[$i ], 0, -2)][] = $vars[$i+1];
} else {
$HTTP_GET_VARS[$vars[$i]] = $vars[$ i+1];
}
$i++;
}
if (sizeof($GET_array) > 0) {
while (list($key, $value) = each( $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 =explode('/', substr(getenv('PATH_INFO'), 1));
for ($i=0, $n=sizeof($vars); $ iif (strpos($vars[$i], '[]')) {
$POST_array[substr($vars[$i], 0, -2) ][] = $vars [$i+1];
} else {
$HTTP_POST_VARS[$vars[$i]] = $vars[$i+1]; i++;
}
if (sizeof($GET_array) > 0) {
while (list($key, $value) = each($POST_array)) {
$HTTP_POST_VARS[$key] ] = $value;
}
}
}
}
functions.php ファイルを開き、?> の前に次のコードを追加します。 🎜>function replace_for_mod_rewrite($s ) {
$s = str_replace("?", "/", $s);
$s = str_replace("&", "/", $s) );
$s = str_replace("&", "/", $s);
$s = str_replace("=, "/", $s); 🎜>
}
sessions.php ファイルを開き、最初に定義された append_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"] ,'inkomi'))
{
$url .= ( ( strpos($url, '?' ) != false ) ? ( ( $non_html_amp ) ? '&' : '&' ) : $SID ;
$url=replace_for_mod_rewrite( $url);
return $ url;
}
この時点で、フォーラムの URL は (http://www.domain/bbs/viewtopic.php/t/4) にマッピングされます。 )。
声明:この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。