実際、すべてがシンプルです。
Wiki百科事典をたくさん作りたいドメインがあるとします。 個々のウィキに対して、個別のサブドメインが必要です。 しかし、我々は、これは単一のコード(リフォームの場合には、我々はすべての時間を変更することができます)上で動作するだけでなく、1件の登録、当社のwikiのすべての間でユーザーを持っていると思います。
この記事では、mediawikiエンジンの例を使用してこれを実装する方法について説明します。
なぜこれが必要なのですか?
私は自分の例で答えます。 さまざまなゲーム用のサイトがいくつかあります。 そして、私は常に、さまざまなゲーム用のある種の単一のWikiリソースを持ちたいと思っていました。
私のシナリオはこれです:
- 単一のドメインがあります(私の場合はplaywiki.ruです )
- あなたがそれを入力すると、プロジェクトの特定のメインページにアクセスします-それが何であるか、なぜ、そしてもちろんの説明-異なるウィキへのリンク
- ゲーム内の個々のウィキは、独自のサブドメインを取ります: wow.playwiki.ru 、 diablo2.playwiki.ruなど。
- ユーザー、グループのテーブル-すべてのサブWikiに共通、およびCookie(つまり、ログインすると、ログインしたままになります)
- 使用される一般的なWikiエンジンコード
- 各ウィキには、独自のデータベース、独自の画像保存フォルダ、独自のスキンとロゴがあります
mediawikiをインストールします。
これまでのところ、すべてが簡単です。 プライマリドメインに通常どおりmediawikiをインストールします。 微妙なことはありません。
サーバー。
私のプロジェクトでは、nginxを使用しています。 設定はやや複雑ですが、Apacheよりもはるかに高速です。
私たちの場合、メインドメインのサブドメインに切り替える必要がありますが、とにかく同じコードが発生します。 簡単に実装されます:
server {
server_name playwiki.ru *.playwiki.ru;
root /wwwroot/playwiki.ru ;
index index.php;
}
ここで、nginxの動作にApacheとの違いがあることに注意してください。 実際、どのサブドメインに切り替えても、 server_nameが常に最初に参加します。
したがって、この場合、PEHAは常に«playwiki.ru»エンジンのMediaWikiをリダイレクト不正確になります$ _SERVER [「SERVER_NAME」]、で受信します。
すぐに、このバグを修正します:
最初のLocalSettings.phpに次のように記述します。
include ( 'My_ExtFunctions.php' );
$_SERVER[ 'SERVER_NAME' ] = ($pw_subdomain_prefix) ? $pw_subdomain_prefix . ".playwiki.ru" : "playwiki.ru" ;
終わりには、すぐに私たちのセットアップを接続します。
include ( 'My_LocalSettings.php' );
ここで、同時に、設定で2つのファイルを接続しました。 LocalSettings.phpをオーバーロードしたくありません。
$ pw_subdomain_prefixはMy_ExtFunctions.php内で設定されます :
function getMySubDomainPrefix() {
$a = $_SERVER[ 'HTTP_HOST' ];
$a = substr($a, 0, strpos($a, ".playwiki" ));
if ($a == 'www' ) $a = '' ;
// secure it!
$a = str_replace( "\t" , "" , str_replace( "\r" , "" , str_replace( "\n" , "" , $a)));
$a = str_replace( "*" , "" , str_replace( "'" , "" , str_replace( "\"" , "" , $a)));
$a = str_replace( " " , "" , str_replace( "," , "" , str_replace( "." , "" , $a)));
$a = str_replace( "/" , "" , str_replace( "//" , "" , str_replace( "\0" , "" , $a)));
return $a;
}
$pw_subdomain_prefix = getMySubDomainPrefix();
サブドメイン上のMediaWikiを設定します。
そのため、サブドメインの名前は$ pw_subdomain_prefixにあります。 すべてのコードはMy_LocalSettings.phpで記述されます 。
デフォルトのスキンを設定します。
$wgDefaultSkin = 'monobook' ;
のは、スキンwow.playwiki.ruスキンフォルダ/スキン/ skin_wow /でなければなりませんためにサブドメイン(例えばを、対応するフォルダに求められたの作ってみましょう:
$wgStylePath = "{$wgScriptPath}/skins" . (($pw_subdomain_prefix == '' ) ? '' : "/skin_$pw_subdomain_prefix" );
$wgStyleDirectory = "{$IP}/skins" . (($pw_subdomain_prefix == '' ) ? '' : "/skin_$pw_subdomain_prefix" );
データベースをサブドメインに依存させましょう。 私の場合、 www.playwiki.ruのwikiは「playwiki」データベースを使用し(ユーザーなどを保存するためのメインベースになります)、サブドメインwikiはplaywiki_wow、playwiki_la2などのデータベースを使用します。
if ($pw_subdomain_prefix) $pw_subdomain_prefix = '_' . $pw_subdomain_prefix;
$wgDBname = 'playwiki' . $pw_subdomain_prefix;
共有テーブルの設定(ユーザー、IPブロッキング):
$wgSharedDB = 'playwiki' ; // The $wgDBname for the wiki database holding the main user table
$wgSharedPrefix = 'wk_' ; // The $wgDBprefix for the database, if not used, this can be omitted
$wgSharedTables = array( 'user' , 'user_properties' , 'ipblocks' , 'user_groups' );
サブドメインにログオンしたユーザーがサブドメインにログオンしたままになるように、Cookieに共通ドメインを設定します。
$wgCookieDomain = '.playwiki.ru' ;
各Wikiサブドメインに独自のロゴを作成します。
$wgLogo = "images/logo$pw_subdomain_prefix.png" ;
アップロード画像の設定(異なるフォルダー内):
$wgEnableUploads = true ;
$wgUploadDirectory = "images" ;
if ($pw_subdomain_prefix) $wgUploadDirectory .= "/img$pw_subdomain_prefix" ;
$wgUploadPath = "{$wgScriptPath}$wgUploadDirectory" ;
$wgUploadDirectory = "{$IP}/$wgUploadDirectory" ;
同時に、許可されていないユーザーの編集を禁止しています。
$wgGroupPermissions[ '*' ][ 'edit' ] = false ;
$wgGroupPermissions[ '*' ][ 'createpage' ] = false ;
$wgGroupPermissions[ '*' ][ 'createtalk' ] = false ;
$wgGroupPermissions[ 'user' ][ 'edit' ] = true ;
$wgGroupPermissions[ 'user' ][ 'createpage' ] = true ;
$wgGroupPermissions[ 'user' ][ 'createtalk' ] = true ;
$wgGroupPermissions[ 'sysop' ][ 'edit' ] = true ;
$wgGroupPermissions[ 'sysop' ][ 'createpage' ] = true ;
$wgGroupPermissions[ 'sysop' ][ 'createtalk' ] = true ;
$wgGroupPermissions[ 'bureaucrat' ][ 'edit' ] = true ;
$wgGroupPermissions[ 'bureaucrat' ][ 'createpage' ] = true ;
$wgGroupPermissions[ 'bureaucrat' ][ 'createtalk' ] = true ;
ウィキ百科事典の複製。
ここでは、非常にエレガントではありません。
wikiをインストールした後、ベースダンプをコピーしました。 今、新しいウィキを追加する必要があるとき、新しいデータベースを(ペンで)作成し、権限を登録して、そこにこのダンプを展開します。
原則として-寛容。 Wikiが1日に10個を持ち上げる予定がないことを考えると。 :)