Основная задача состоит в том, чтобы определить, какой из возможно многих экземпляров вики был
называется. Вместо того, чтобы устанавливать это вручную, мы будем ленивы и проанализируем его из переменных сервера.
суб 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;
# указанная база данных
. $ИмяСкрипта;
# по умолчанию