2013-04-04 2 views
3

Если я хочу, чтобы мой сервер кеш-лака заменил содержимое внутри страницы (т. Е. Изменил класс на div) из бэкэнд перед обслуживанием или сохранением страницы (vcl_fetch?), Как это можно сделать?замена содержимого на странице с помощью лака + regex

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

ответ

3

Изменчивое тело ответа не поддерживается лаком. Для этого вам нужен модуль Varn (vmod).

Aivars Kalvans имеет libvmod-rewrite, что делает именно то, что вы ищете. Однако vmod является доказательством концепции, и, согласно Айвару, он не готов к производству. Вы можете использовать его в качестве отправной точки в любом случае.

Если вы используете Apache, вы можете использовать mod_ext_filter для изменения тела ответа. Вот пример из документации mod_ext_filters. Поскольку вы можете передать тело ответа любой внешней команде, очень легко внести необходимые изменения в контент.

# mod_ext_filter directive to define a filter which 
# replaces text in the response 
# 
ExtFilterDefine fixtext mode=output intype=text/html cmd="/bin/sed s/verdana/arial/g" 

<Location /> 
# core directive to cause the fixtext filter to 
# be run on output 
SetOutputFilter fixtext 
</Location> 
+0

Закончено только написать мою собственную сквозную прокладку, прежде чем она попадет в лак. Однако я посмотрю на libvmod-rewrite. Благодарю. – tweak2

+0

Что касается 'mod_ext_filters', я думаю, возможно, [mod_substitute] (http://httpd.apache.org/docs/2.4/mod/mod_substitute.html) может быть даже лучше подходит для usecase, если apache является опцией – George