Основная задача состоит в том, чтобы определить, какой из возможно многих экземпляров вики был

называется. Вместо того, чтобы устанавливать это вручную, мы будем ленивы и проанализируем его из переменных сервера.

суб MakePaths {

мой ©path = split('/', "$ENV{SCRIPT_NAME}");

$ScriptName = поп(@путь);

$CgiAlias = поп(©путь);

Команда split объединяет уровни отдельных подкаталогов в вызове URL, поэтому

для http://mydomain. com/cgi/mywiki последний извлеченный компонент — это просто mywiki. Этот


РАЗБОР ЗАПРОСОВ

249

имя файла вместе с возможным псевдонимом каталога CGI, автоматически и однозначно

создает ссылки на сценарии, указывает подкаталог страницы и обращается к ряду других

файлы, связанные с этим конкретным экземпляром. (В отличие от QuickiWiki, здесь все запросы идут

через тот же URL.)

Из переменных сервера мы также можем выделить следующее:

$WebRoot = "$ENV{D0CUMENT_R00T}/", если только $WebRoot;

$WikiRoot = $WebRoot. $ Викидом ; # путь в файловой системе к родительской вики

$ReferUrl = $ENV{HTTP_REFERER}; # страница, на которую последний раз нажимал пользователь

$ServeDom = $ENV{HTTP_H0ST}; # доменное имя сервера

$ServeRoot = "http://$ServeDom/"; # URL-адрес сервера

Для удобства последующих конкатенаций заглушки пути могут заканчиваться знаком "/". А

предостережение в отношении использования серверной переменной «корневой документ», потому что это

Расширение Apache для спецификации CGI. Если он сломается или есть сомнения, отмените это

путем предварительного определения веб-корня как известного пути в заглушке. Тем не менее, это сработало как

ожидается с серверами Apache.

Эти производные пути затем используются для получения ряда других вики-путей,

включая самый важный, URL-адрес, который вызывает вики:

$ScriptUrl = $ServeRoot

. "$CgiAlias/$ScriptName";

Строка URL-адреса скрипта используется всякий раз, когда требуется активная вики-ссылка или запрос формы.

заглушка для повторного вызова в ответ на действие пользователя.

если ($ RePoint) {

$DataBase = $WikiRoot

} еще {

$DataBase = $WikiRoot

}

. $RePoint;

# указанная база данных

. $ИмяСкрипта;

# по умолчанию