Назад | Перейти на главную страницу

Как вставить HTML-код в каждую доставленную HTML-страницу?

У меня есть Apache web server доставляет статические HTML-страницы. По какой-то причине я не могу изменить сами файлы, но все же хочу добавить HTML-код на каждую обслуживаемую страницу.

Возможно ли это с mod_proxy? Если нет, может ли кто-нибудь порекомендовать программное обеспечение, обеспечивающее такую ​​функцию?

РЕДАКТИРОВАТЬ: мне нужно вставить какой-то рекламный баннер (например, javascript) и пиксель отслеживания.

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

Самый простой и эффективный способ делать то, что вы хотите, - это использовать Фильтр Apache.

Просто иметь:

ExtFilterDefine css_changer mode=output intype=text/html cmd="/some/php/script.php"
SetOutputFilter css_changer

Возможный сценарий:

#!/usr/bin/php
<?

#phpinfo(); // Uncomment to see ALL env variables
$host = $_ENV["HTTP_HOST"]; // www.site.com
$script_name = $_ENV["SCRIPT_NAME"]; // /theme/green/style.css
$pi = pathinfo($script_name);
$type = $pi['extension'];
#print "$host $script  $type";

$stdin = STDIN;

while($line = fgets($stdin)){
  $line = preg_replace('/a/', 'A', $line);

  fwrite(STDOUT, $line);
}
fclose(STDOUT);
?>

Это изменит все «а» на «а».

Обязательно включите фильтр в своем httpd.conf, например:

LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so

Этот вопрос очень популярен в Google, а форумов мало.

Вы можете сделать это: Работайте с mod_rewrite для изменения запросов от

/some/static/page.html

к

/htmlinjector.php?url=/some/static/page.html

затем используйте PHP (или то, что вы сочтете подходящим) для манипулирования файлами. Добавьте кеш вывода для повышения производительности.

Как альтернатива, Обработчики Apache звучит полезно:

Изменение статического содержимого с помощью сценария CGI

Следующие директивы вызовут запросы файлов с html расширение, чтобы запустить запуск footer.pl CGI скрипт.

Action add-footer /cgi-bin/footer.pl
AddHandler add-footer .html

Затем сценарий CGI отвечает за отправку первоначально запрошенного документа (на который указывает PATH_TRANSLATED переменная среды) и внесение любых изменений или дополнений.

Это более или менее то же самое, что подход mod_rewrite, только с меньшим количеством взлома.

Я бы предпочел сделать это с помощью mod_rewrite и SSI.

Сначала поместите путь в переменную среды

RewriteCond %{IS_SUBREQ} false
RewriteRule ^(/.*\.html) /page.shtml [E:filename:$1]

затем обработайте это в файле shtml

<!--#include virtual="$filename"-->

(части этого решения основаны на вопросе о переполнении стека https://stackoverflow.com/questions/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832 )

Вот учебник о том, как использовать mod_proxy_html для редактирования ссылок на веб-странице (содержимого). Возможно, вы сможете применить это изменение к желаемому HTML.

ОБНОВЛЕНИЕ: вы уверены, что хотите пойти по этому пути? Я думаю, что Apache предназначен для обслуживания контента, а не для его создания. Это, вероятно, будет происходить в части представления MVC-фреймворка. Причина, по которой я не рекомендую это, в том, что вы нарушаете правило модульности. Ваше веб-приложение будет связано с приложением, которое его обслуживает, что усложняет будущие обновления, перемещения и т. Д.

mod_sed здесь хорошо подходит. Вы можете создать выходной фильтр, который соответствует, например, закрывающему заголовку или тегу body, и вставить перед ним свой html.

Будет ли использоваться модуль mod_perl?

http://search.cpan.org/~gozer/Apache2-Layout-0.6/lib/Apache2/Layout.pm

Это может сделать то, что вы хотите, или, по крайней мере, указать вам правильное направление.

Вы можете использовать Apache mod_substitute для вставки html в исходящие ответы, используя некоторые критерии или регулярные выражения. Вот объяснение того, как этого добиться.

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

<Directory "/usr/local/www/data/scott">
    Options +Indexes
    AllowOverride All
    AddOutputFilter LAYOUT html htm shtml
    LayoutComment On
    LayoutHeader /wrappers/scott-header.html
    LayoutFooter /wrappers/scott-footer.html
</Directory>

Больше информации здесь: http://wannabe.guru.org/scott/hobbies/apache/

Макет мода теперь устарел, и если вы не хотите накладных расходов на вызов внешнего скрипта, лучшим решением, которое сработало для меня, было мод sed. Вы можете использовать мод sed, чтобы сопоставить первую строку документа (1s) и добавить туда код сценария заголовка, сопоставить последнюю строку ($ s) и поместить туда нижний колонтитул.

Options Indexes FollowSymLinks Includes ExecCGI
Order Deny,Allow
Deny from none
Allow from all
Require all granted

AddOutputFilter Sed html
SetOutputFilter Sed;DEFLATE
OutputSed "1s|^|<header code>|"
OutputSed "$s|$|</footer code>|g"

Я могу вставить html на все страницы через Apache, но только для сайта, размещенного на моем apache, а не для всего сайта, хотя мой прокси-сервер apache.

вот как это работает. Я установил XAMPP, загрузил mod_layout 5.1 для apache 2.4. (установить mod_layout просто, если вы используете XAMPP для Windows, просто скачайте mod_layout.so 5.1 для Windows и поместите его в папку вашего модуля apache $ home / apache / module, затем добавьте конфигурационный DSO в ваш httpd.conf LoadModule layout_module modules / mod_layout.so - если вы используете Linux или другую ОС, вы должны загрузить mod_layout.so для Linux, а затем запустить команду make для установки)

После установки mod_layout.so для Windows просто поместите этот код в свой файл .htaccess или httpd.conf, и вы получите вставку HTML на всю вашу страницу:

<IfModule mod_layout.c>
AddOutputFilter LAYOUT html 
AddOutputFilter LAYOUT htm 
AddOutputFilter LAYOUT shtml 
AddOutputFilter LAYOUT shtm 
AddOutputFilter LAYOUT cgi 
AddOutputFilter LAYOUT php 
LayoutFooter "C:/xampp/apache/cgi-bin/footer.php"
</IfModule>

C: /xampp/apache/cgi-bin/footer.php - это место, куда вы помещаете свой файл html или php, в моей ситуации это C: /xampp/apache/cgi-bin/footer.php, но вы можете разместить его где угодно Просто дай верный путь, все будет хорошо