MediaWiki/Wiki family (farm)/Способ 2

From SysadminWiki.ru
Jump to: navigation, search

Читайте также:

  • MediaWiki - общая статья об установке и настройке MediaWiki
  • MediaWiki/Wiki family (farm) - основная статья о создании фермы вики на движке MediaWiki.


Вводная часть

Этот способ передаёт index.php параметр w, который указывает с какой вики сейчас идёт работа. Создание каталогов и ссылок не требуется в отличае от первого метода.

Этот способ не удалось довести до желаемого результата!


Удалось:

  • Объединить три вики в один проект, используя один движок.
  • Навигация,авторизация и редактирование по всем вики работает, но только если зарегистрироваться только в одной вики.
  • Настроить короткий URL


Проблемы:

  • В URL страницы пришлось добавить явно параметр с указанием вики
testwiki.org/main/Заглавная_страница?w=main
  • Если зарегистрироваться сразу в двух вики, то поиск и редактирование ведутся только в одной (т.к. используют одну куки cookie)

Большинство служебных ссылок в статьях не используют этот параметр (он добавлен только в ссылку "переименовать"), поэтому данные беруться из куки.


Вывод:

Если пользователь не будет редактировать в одном браузере сразу несколько вики, то можно использовать этот метод.

Ниже приведён алгоритм по которому проводилась настройка. Любой желающий может его доделать. См. статью по которой делалась настройка.

Настройка

  • Добавим в конец LocalSettings.php код (основан на коде с сайта Стива Румберга), который пропишет в браузер пользователя куки с информацией о текущей вики:
# The system determines which wiki to display based on either:
#   W parameter passed to INDEX.PHP, or
#   the cookie "wikiCode"

# First, test for the W parameter. Was it passed?
$sr_WikiCode = $_REQUEST['w'];  
if ($sr_WikiCode <> "") {  
     # Yes, W parameter was passed, so save it in a cookie until it gets changed. 
   setcookie('wikiCode', $sr_WikiCode, time()+60*60*24*365, '/', '.testwiki.org');

} elseif ($_COOKIE['wikiCode'] <> "") {       
     # the parameter "W" wasn't passed but the cookie wikiCode does have a value, so use it
   $sr_WikiCode = $_COOKIE['wikiCode'];

} else {
     # neither the W parameter was passed nor does the cookie wikiCode have a value, so 
     # we don't know which wiki to display. Let user know that we cannot continue.
   die('No valid wiki specified');
}

# Set the configuration variables specific to the individual wiki
require_once ('LS_' . $sr_WikiCode . '.php');
  • В LocalSettings.php сейчас описаны настройки основного сайта (main). Настройки остальных вики будут храниться в файлах вида LS_WikiPrefix.php, где WikiPrefix - префикс для вики в БД. Так вики main, pool и lib должны иметь префиксы "main_", "pool_" и "lib_" соответственно. В этих дополнительных настроечных файлах мы может переопределять любые переменные.
  • LS_main.php
<?php
# called by: LocalSettings.php
#
# Nothing to change. This is the main site.
#
  • LS_pool.php
<?php
# called by: LocalSettings.php

$wgDBprefix = "pool_";
$wgSitename = "TestWiki common pool";
  • LS_lib.php
<?php
# called by: LocalSettings.php

$wgDBprefix = "lib_";
$wgSitename = "TestWiki library";
  • Теперь создаём таблицы для новых двух вики. Чтобы воспользоваться конфигурационным скриптом как и для создания первой вики, временно переименуем файл LocalSettings.php. Параметры соединения к БД указывает теже, что и для первой вики. Не забудем указать префиксы к теблицам (pool_ и lib_). Генерируемые файлы LocalSettings.php для новых вики переносим куда-нибудь. Они нам не пригодятся, но лучше их сохранить до конца настройки проекта в целях отладки, если вдруг возникнут осложнения.
  • Возвращаем переименованному ранее LocalSettings.php его исходное имя.
  • В браузере проверяем авторизацию и навигацию по вики:
    • testwiki.org/test/index.php?w=main
    • testwiki.org/test/index.php?w=pool
    • testwiki.org/test/index.php?w=lib

Делаем URL коротким

  • Во всех конфигурационных файлах Добавляем переменную $wgArticlePath, так, в LocalSettings.php прописываем:
$wgArticlePath = "/main/$1"; 
  • Создаём файл .htaccess в корне проекта, т.е. на том же уровне что и каталог "test", где описываем правила для модуля Apache mod_rewrite:
RewriteEngine On
RewriteRule ^main/(.*)$ /test/index.php?title=$1&w=main [PT,L,QSA]
RewriteRule ^main/*$ main/ [L,QSA]
 
RewriteRule ^pool/(.*)$ /test/index.php?title=$11&w=pool [PT,L,QSA]
RewriteRule ^pool/*$ pool/ [L,QSA]

RewriteRule ^lib/(.*)$ /test/index.php?title=$11&w=lib [PT,L,QSA]
RewriteRule ^lib/*$ lib/ [L,QSA]
 
RewriteRule ^/*$ /test/index.php [L,QSA]

Для лучшего понимания этого кода можно подробней ознакомиться с синтаксисом дерективы RewriteRule.


  • Проверяем навигацию по всем трём вики.
    • testwiki.org/main/
    • testwiki.org/pool/
    • testwiki.org/lib/