作者: トロッター
電子メール: [email protected]
出典: www.gbunix.com
文書を完全なものにし、転載する場合には出典を明記してください。
はじめに
インターネット上のコンテンツが驚くべき速度で増加するにつれて、Web サイトがユーザーフレンドリー (ユーザーフレンドリー) であることに加えて、検索エンジンによるインデックスの強化を望む場合、検索エンジンの重要性がますます高まっています。ウェブサイトのデザインも検索エンジンに優しいものでなければなりません。 (検索エンジンに優しい) デザインも非常に重要です。検索エンジンに入力されるページ コンテンツが多ければ多いほど、さまざまなキーワードを使用しているユーザーが見つけられる可能性が高くなります。動的 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();
関数 replace_for_mod_rewrite(&$s)
{
$urlin =
配列(
"'(?<!/)viewforum.php?f=([0-9]*)&topicdays=([0-9]*)&start=([0-9]*)'",
"'(?<!/)viewforum.php?f=([0-9]*)&mark=トピックス'",
"'(?<!/)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]*)&ハイライト=([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 = 配列(
"ビューフォーラム\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();
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('場所: ' . $url);
出口;
、
bbs ディレクトリに .htaccess ファイルを作成します。ファイルの内容は
次のとおり
です。
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&ポストオーダー=$3&スタート=$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 [email protected]
ドキュメントルート /home1/ftp/trotter/www
サーバー名www.gbunix.com
リライトエンジンオン
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 ファイルの最後に追加するだけです。
注: システムのセキュリティのため、bbs リリース ディレクトリに robots.txt ファイルを作成することが非常に重要です。ファイルの内容は次のとおりです。
許可しない: /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 がインストールされていない場合は、Apache をコンパイルするときに mod_rewrite モジュールをコンパイルするだけです。 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 // 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
ファイルを開き、次のコードを最初の行に追加します:
<base href=" http://www.your-forum.com/forum-dir/ ">
config.php ファイルを開き、?> の前に次のコードを追加します:
if ($REQUEST_METHOD == "GET") {
if (strlen(getenv('PATH_INFO')) > 1) {
$GET_array = 配列();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars =explode('/', 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];
}
$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 = 配列();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars =explode('/', 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];
}
$i++;
}
if (sizeof($GET_array) > 0) {
while (list($key, $value) = each($POST_array)) {
$HTTP_POST_VARS[$key] = $value;
}
}
function replace_for_mod_rewrite($s) {
$s = str_replace("?", "/", $s);
}
}
function.php ファイルを開き、?> の前に次のコードを追加します。
$s = str_replace("&", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=, "/", $s);
session.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);
$url を返します。
時点
で、フォーラムの URL は ( http://www.domain/bbs/viewtopic.php/t/4 ) にマッピングされます。
参考文献: