Apache изменять код html на лету

T
На сайте с 16.02.2007
Offline
4
2934

Приветствую. Вопрос такой - вот есть у нас mod_rewrite. Использует регулярные выражения, меняет линки. Все супер, сам пользуюсь.

Задача похожая, но другая и даже обратная - есть html страницы, надо, отдавая их клиенту заменять одну строку на другую в body страницы - типа php-шного str_replace. Можно это сделать средствами Apache для страниц html? Страницы старые, взяты со старого сайта, в них прописаны полные пути к images, вместе с указанием старого сервера. Страниц много, посещятся они будут редко - что-то вроде архива. Зачем в них прописаны полные пути с указанием сервера - загадка программирования.

Ayavryk
На сайте с 11.10.2003
Offline
209
#1

Если это статические страницы - почему нельзя одноразово пропустить все странички через какой-нибудь офлайновый скрипт с контекстной заменой? И забыть навсегда.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
T
На сайте с 16.02.2007
Offline
4
#2
Ayavryk:
Если это статические страницы - почему нельзя одноразово пропустить все странички через какой-нибудь офлайновый скрипт с контекстной заменой? И забыть навсегда.

Можно, но не интересно.

WebCode
На сайте с 03.06.2005
Offline
86
#3

Есть модуля для Apache, который позволяет менять один текст на другой. Кажется "mod_layout".

dkameleon
На сайте с 09.12.2005
Offline
386
#4
Tallin:

Можно, но не интересно.

Согласен :) Всегда интереснее серверок на пустом месте пригрузить ;)

Дизайн интерьера (http://balabukha.com/)
Roxis
На сайте с 19.11.2006
Offline
40
#5

пропускать всё через свой cgi скрипт

Options +ExecCGI

AddHandler my-cgi htm html

Action my-cgi /cgi-bin/my.cgi

Andreyka
На сайте с 19.02.2005
Offline
822
#6

Не изобретайте велосипед, учите shtml.

Не стоит плодить сущности без необходимости
Pike
На сайте с 13.07.2004
Offline
79
#7

А я бы не задумываясь реврайтил бы все через PHP скрипт, который бы читал файл, переписывал строку, и отдавал все клиенту. А задумываясь, скрипт бы при этом еще и переписывал изначальный файл на исправленный 🙄

free hosting (http://rahost.com)
T
На сайте с 16.02.2007
Offline
4
#8
dkameleon:
Согласен :) Всегда интереснее серверок на пустом месте пригрузить ;)

Валуйный серверок пригрузить - только в радость!

Будет время, посмотрю mod_layout (спасиб WebCode) - очень интересны возможности Apache, тем более инфы не так много.

Файлики html уже почистил - примерно как писал Ayavryk - написал функцию на php - прошлась по всем html файлам в каталоге и исправила линки img.

Спасибо всем за информацию.

S
На сайте с 17.02.2007
Offline
25
#9

Как-то собирался написать и не написал. Была у меня аналогичная ситуация. Вот мой алгоритм действий (може кому на будущее пригодиццо):

Задача была вставить внизу каждой страницы кусок кода, который будет выводить баннер. Менять каждый статический html не охота. Было сделано следующее:

1) Ищем все файлы в которых не закрыт тэг <body>:

for f in `find /home/www/virgtual/sitename -name \*.htm -print`; do grep '</body>' $f > /dev/null; if [ $? -eq 1 ]; then echo $f; fi; done

2) В найденных файлах тэг закрвыаем.

3) Добавляе вот такое в виртуалхост:

ScriptAlias /cgi-bin/ "/home/www/virtual/sitename/cgi-bin/"

AddHandler my-parser-handler htm

Action my-parser-handler /cgi-bin/server_parser

4) Вот такое в файл cgi-bin/server_parser:


#!/usr/bin/perl
print "Content-type: text/html; charset=koi8-r \r\n\r\n";
$param = $ENV{PATH_TRANSLATED};

unless (open (REQUEST, $param)) {
print "Requested page unavailable\n";
} else {
@file = <REQUEST>;
foreach $line (@file){
if ($line =~ /<body/){
print $line;
print <<CODE
[ЗДЕСЬ ПИШЕМ ТО ЧТО НУЖНО ВЫВЕСТИ ВВЕРХУ СТРАНИЦЫ]
CODE
;
};

if ($line =~ /<\/body>/) {
print "<BR><BR><BR><center><strong><a href=\"http://sitename.org/about/\">Lorem ipsum<br>dolor sit</a></strong></center></body>";
};

if ($line !~ /<body/ or $line !~ /<\/body/) {print $line};

};
};

Вот так и работает - вверху баннер, внизу слоган.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий