После того, как Web-сервер сконфигурирован и отлажен, создадим для примера небольшой Web-сайт, чтобы показать, как развертывать информацию в Web.
Построим сайт, который будет содержать информацию о небольшой издательской компании On The Web Publishers. Разместим на сайте список новых изданий, общую информацию об издателе, форму для контактов и защищенный паролем раздел для эксклюзивного использования авторами, имеющим контракт с издателем.
В рамках поставленной задачи попытаемся создать сайт, содержащий HTML-документы и изображения, использующий CGI-программирование и выполняющий контроль доступа защищенного паролем раздела на сайте.
Определим структуру сайта, как показано на рис. 32.2.
Рис. 32.2.
Структура Web-сайта
Создадим файлы, необходимые для реализации этой структуры. Подразумевая использование конфигурации, рассмотренной ранее в главе, поместим корневой каталог для дерева HTML-документов в /var /www/html, а каталог CGI - в /var /www/cgi-bin. Дерево каталогов и файлов:
/var/www/html/index.html
/var/www/html/about/index.html
/var/www/html/books/index.html
/var/www/html/contact/index.html
/var/www/html/authors/index.html
/var/www/cgi-bin/formmail
Кроме последнего файла, который мы рассмотрим вкратце, все перечисленные файлы являются HTML-файлами. Все вспомогательные файлы с изображениями, используемые HTML-файлами, можно разместить в тех же каталогах, что и файлы HTML. Многие Web-мастера предпочитают размешать все файлы с изображениями в другом каталоге. Этот каталог может быть следующим.
/var/www/html/images/
Так как в главе не рассматривался язык HTML, оценим два HTML-файла в качестве примеров соответствующих документов. Начнем с главной домашней странички /var/www/html/ index. html. В данном случае исходный текст файла может быть следующим.
<HTML>
<HEAD>
<TITLE>On the Web Publishers</TITLE>
</HEAD>
<BODY BGCOLOR=lightcyan TEXT=midnightblue>
<A HREF="/">
<IMG SRC="/images/logo.gif" BORDER=0></A>
<table CELLPADDING=5 CELLSPACING=5
BGCOLOR=1ightp ink> <TR>
<TD ALIGN=CENTER><A HREF="about">AB00T U</A></TD>
<TD ALIGN=CENTER><A HREF="books">OUR
BOOKS</A></TD>
<TD ALIGN=CENTER><A HREF="contact">CONTACT
US</A></TD> <TD ALIGN=CENTER><A HREF="authors">JUST FOR
AUTHORS</A></TD>
</TR> </TABLE> </DIV>
<FONT SIZE=5>W</F>elcome to <STRONG>On the Web Publishers</STRONG>.
We offer the finest in on-line electronic books at .reasonable prices. Check out what we have to offer ...
<UL>.
<LI><A HREF="about">Learn about what we do</A>
<LI><A HREF="books">See what books we offer</A>
<LI><A HREF="contact">Contact us</A>
</UL>
</BODY> </HTML>
Результат работы этого файла показан на рис. 32.3.
Рис. 32.3.
Домашняя страница
Остальные страницы будут выглядеть примерно так же, кроме формы для контактов /var/ www/html/contact/index.html. Форма для контактов показана на рис. 32.4, она реализуется следующим исходным кодом.
<HTML>
<TITLE>On the Web Publishers</TITLE> </HEAD>
<BODY BGCOLOR=lightcyan TEXT=midnightblue>
<DIV ALIGN=CENTER>
<A HREF="/">
<IMG SRC="/images/ldgo.gif" BORDER=0></A>
<table CELLPADDING=5 CELLSPACING=5
BGCOLOR= 1 ightp ink> <TR>
<TD ALIGN=CENTER><A HREF="/about">ABOUT
US</A></TD>
<TD ALIGN=CENTER><A HREF="/books">OUR
BOOKS</A></TD>
<TD ALIGN=CENTER BGCOLOR=yellow>CONTACT
US</TD> <TD ALIGN=CENTER><A HREF="/authors">JUST FOR
Эта страница содержит форму и ссылку на CGI-программу, которая обрабатывает данные из формы. В нашем случае используется программа f ormmail (бесплатно распространяемый сценарий CGI, написанный на Perl), которая считывает содержимое формы и отправляет его по почте на предопределенный почтовый адрес. В рассматриваемом примере контактная информация из формы отправляется по почте на главный почтовый адрес книжного магазина.
Forramail написал Matthew M. Wright. Эта программа доступна по адресу http: / /www. worldwideniart.com/scripts/formmail .shtml. Несмотря на то, что в главе не затрагивалось программирование на Perl и CGI, мы приводим исходный код программы. Можно заметить, что создание несложных CGI-программ не требует особых усилий.
#!/usr/bin/perl ################################
# FonriMail Version
1.6 #
# Copyright 1995-1997 Matt Wright mattw@worldwidemart.com #
<td>Следующие поля в предоставленной Вами форме незаполнены:<р>
<ul>
$missing_field_list </ulxbr>
Эти поля должны быть заполнены для успешной подачи формы. <р> Пожалуйста, используйте кнопку Back браузера для возврата к форме ->и исправьте данные. <hr size=l> <center><font size=-l>
Эта профамма возвращает пользователю HTML-страницу, сообщающую о том, что контактна)? информация в форме обработана или содержит ошибки, если таковые имеются. Это очень важный компонент всех CGI-программ - они должны либо вернуть правильные данные браузеру (например. HTML-документ или содержимое файла с изображением), либо перенаправить браузер на правильный URL.
Профамма f ormmail реализует много других функций: она может установить строку темь; (subject) при отправке e-mail и выполнить проверку того, что сценарий не используется незаконно пользователями с других Web-сайтов. Более детальная информация доступна на Web-сайте профаммы.
Последний, важный этап создания Web-сайта - оформление офаничений доступа для каталога /var/www/html/authors/, чтобы только уполномоченные пользователи имели доступ к файлам в этом каталоге. Чтобы сформулировать эти офаничения, нужно решить две задачи Во-первых, следует создать файл пользователей с перечнем необходимых пользователей (мы уже делали это в предыдущем парафафе, посвященном защите каталогов с использованием управления доступом). Нужно создать офаничения доступа для всех пользователей, которым предоставляется доступ к каталогу.
Во-вторых, нужно создать фуппу. Назовем ее authors, чтобы было проще выполнять работ по администрированию доступа к каталогу. Создается эта фуппа добавлением в файл групп (group) Web-сервера строки для фуппы, которая выглядит примерно так:
authors:
author1 author2 author3
Эта строка указывает, что трем пользователям предоставляется доступ к каталогу.
Наконец, нужно создать файл .htaccess в каталоге /var/www/html/authors/ ("Auth" в приведенных ниже командах относится к аутентификации, authentication, а не к нашей группе authors).
AuthName Just For Authors AuthType Basic
AuthUserFile /etc/httpd/conf
/users AuthGroupFile /etc/httpd/conf
/groups require group authors
AuthName указывает отображаемую пользователю подсказку. AuthUserFile сообщает серверу, где искать список допустимых пользователей и паролей, a AuthGroupFile - где находится список допустимых групп. Наконец, команда require указывает, что только членам группы authors нужно предоставить доступ к каталогу.
Если пользователь попытается получить доступ к данному каталогу в начале сессии, он увидит диалоговое окно аутентификации, отображаемое браузером, подобное тому, которое отображает Netscape-(pnc. 32.5).
Рис. 32.5.
Диалоговое окно аутентификации пользователя в Netscape
По умолчанию, если пользователь не пройдет аутентификацию, он получит страницу с сообщением об ошибке и предложением пройти аутентификацию. Для предоставления специализированной страницы, извещающей об ошибке аутентификации, следует отредактировать файл httpd.conf, чтобы указать на специализированное сообщение об ошибке, добавив в файл следующую строку:
ErrorDocument 401 /error.html
Этот элемент указывает, что при возникновении ошибки 401 (Authorization Required - Требуется аутентификация) сервер должен возвращать указанный URL вместо сообщения по умолчанию. Когда пользователь не пройдет аутентификацию, он получит модифицированную страницу с сообщением о неудачной аутентификации.