У меня есть 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, но вы можете разместить его где угодно Просто дай верный путь, все будет хорошо