Поддержка SSI в встроенном HTTP сервере FREESCO
nssi 1.0
Учитывая что для разработки даже данного сайта необходим SSI, а thttpd не имеет встроенной поддержки, я попробовал заюзать внешнюю прогу которая выложена у Dingetje ssi.tar.gz, но был неприятно удивлен отсутствием некоторых возможностей:(, в частности конструкция <!--#set var="foo" value="foobar" --> не работала абсолютно :(Поэтому появилась эта програмка. Правда тут используется Perl, соответственно, работать будет возможно медленее, но я задач производительности не ставил :) Конечно, это решение не идеально. В частности вычисление условных выражений очень ограничено :( Там надо писать довольно сложный анализатор. Надеюсь руки дойдут, исправлю...
Поискав на CPAN нашел несколько модулей для работы с SSI. Наилучшим образом подошел модуль CGI::SHTML by Tim Skirvin <tskirvin@ks.uiuc.edu>. Он и был взят за основу.
Была изменена функциональность включаемых виртуальных ссылок. Чтобы можно было использовать относительные пути с двумя точками.
Например в документе http://freesco.linux.kiev.ua/cgi/nssi/docs/overview.shtml ссылка на файл заголовка может быть оформлена таким образом
<!--#include virtual="../templates/page_top.shtml" --> и соответствовать она будет http://freesco.linux.kiev.ua/templates/page_top.shtml.
И сделать я ее постарался, чтобы все же не нанести урон безопасности. Поэтому выйти выше корня сайта с помощью такой конструкции нельзя.
При этом не получиться использовать относительные пути в обычных ссылках на ssi документы, так как подстановкой базового пути занимается сам броузер. Перехватить вызов может только сам thttpd демон :( А мы можем резолвить имена только получив управление. Есть несколько вариантов:
- Сделать все сылки на shtml документы абсолютными с включением скрипта в путь.
- Указать в теге 'base' путь с учетом скрипта для указания корня всех относительных ссылок.
Скрипт рассчитан на использование с расширением '.shtml'.
Файлы или каталоги которые не будут распознаны, будут переадресованы обратно веб серверу с верным URL.
Получившаяся программа используется по тому же принципу что и ssi, но реализует больше возможностей :)
В архиве находятся два файла: собственно сам nssi и перловый модуль lib/CGI/SHTML.pm. Нобходимо развернуть архив в каталог /www/cgi. Перловый модуль можно поместить в стандартный каталог с модулями /usr/local/lib/perl5/5.6.1/CGI.
Для ее работы необходимо чтобы thttpd мог выполнить этот файл. Для этого или задайте ему расширение .cgi, именно это расширение используется thttpd по умолчанию, или добавьте к строке запуска thttpd параметр -c "cgi/**".
!!! ОСТОРОЖНО !!!, в этом случае все исполняемые файлы в каталоге cgi смогут быть выполнены. Пользуйтесь с умом, неаккуратное использование SSI может отрицательно сказаться на безопасности вашего сайта.
Примеры использования
- http://router.inet/cgi/nssi/index.shtml
- http://router.inet/cgi/nssi/docs/manual.shtml
- http://router.inet/cgi/nssi/downloads/
- http://router.inet/cgi/nssi
23554250