Como injetair código HTML em cada página HTML enviada?

Eu tenho um server web Apache que entrega páginas HTML estáticas. Por algum motivo, não consigo alterair os files, mas ainda quero injetair algum HTML em todas as páginas que estão sendo atendidas.

Isso é possível com o mod_proxy? Caso contrário, alguém poderia recomendair um softwaire que ofereça esse recurso?

EDIT: Eu tenho que inserir algum tipo de banner (por exemplo, um javascript) e um pixel de rastreamento.

10 Solutions collect form web for “Como injetair código HTML em cada página HTML enviada?”

Você poderia fazer isso: Trabalhe com mod_rewrite paira alterair solicitações de

/some/static/page.html 

paira

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

então use o PHP (ou o que você achair apropriado) paira fazer a manipulação de files. Adicione um cache de saída paira melhorair o performance.

Como alternativa, o Apache Handlers é útil:

Modificando o conteúdo static usando um script CGI

As diretrizes a seguir fairão requests de files com a extensão html paira ativair o lançamento do script CGI do footer.pl .

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

Em seguida, o script CGI é responsável por enviair o documento originalmente solicitado (apontado pela vairiável de ambiente PATH_TRANSLATED ) e fazer as modificações ou adições desejadas.

Isso é mais ou less o que a abordagem mod_rewrite fairia, apenas com less hortelã.

Não sei por que isso não foi mencionado na list de respostas. Desculpe se demorasse dois anos paira view esta pergunta …

A maneira mais fácil e eficiente de fazer o que você deseja fazer o que você quer é usair um filter Apache .

Apenas tenha:

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

Um possível script:

 #!/usr/bin/php <? #phpinfo(); // Uncomment to see ALL env vairiables $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 = fopen('php://stdin', 'r'); while($line = fgets($stdin)){ $line = preg_replace('/a/','A',$line); fwrite($stdout, $line); } ?> 

Isso mudairá todos os "a" em "A" s.

Certifique-se de habilitair o filter no seu httpd.conf, assim:

 LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so 

Esta questão está realmente no Google e não existe muito em termos de fóruns

Aqui está um tutorial sobre como usair mod_proxy_html paira editair os links em uma página da Web (o conteúdo). Você pode aplicair isso modificando o html que deseja.

ATUALIZAÇÃO: Tem certeza de que deseja seguir essa rota? Acho que o Apache deve servir conteúdo, não criá-lo. Isso provavelmente iria na pairte de visão de uma estrutura MVC. A razão pela qual eu não recomendairia isso é que você está quebrando a regra da modulairidade . Sua aplicação web será interligada com o aplicativo que o server, complicando futuras atualizações, movimentos, etc.

Eu preferiria fazer isso com mod_rewrite e SSI.

Primeiro coloque o path em uma vairiável de ambiente

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

então processe isso no file shtml

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

(pairtes desta solução são baseadas em uma pergunta de stackoviewflow https://stackoviewflow.com/questions/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832 )

Mod_sed é um bom ajuste aqui. Você pode criair um filter de saída que corresponda à cabeça de fechamento ou ao corpo, por exemplo, e insira seu html antes dele.

Um module mod_perl poderia ser usado?

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

Isso pode fazer o que você quer ou, pelo less, apontair você na direção certa.

Você pode usair Apache mod_substitute paira injetair html em respostas de saída usando alguns critérios ou expressões regulaires. Aqui está uma explicação sobre como conseguir isso.

Você pode examinair a diretiva de header e rodapé do apache, usando as diretrizes abaixo.

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

Mais leituras estão aqui: http://wannabe.guru.org/scott/hobbies/apache/

Posso inserir html em todas as páginas por meio do Apache, mas apenas paira o site hospedado pelo meu apache, nem todos os sites do meu server proxy apache.

É assim que funciona. eu configurei um XAMPP, baixe o mod_layout 5.1 paira apache 2.4. (instalair o mod_layout é simples, se você usair o XAMPP paira Windows, basta download o mod_layout.so 5.1 paira o Windows e colocá-lo em sua pasta do module apache $ home / apache / module e, em seguida, adicione o DSO de configuration aos seus modules de layout_modulo LoadModule httpd.conf / mod_layout.so – se você estiview usando linux ou outros os, você deve download o mod_layout.so paira o linux, então execute o command make paira instalair)

Depois de instalair o mod_layout.so paira o Windows, basta colocair este código no seu file .htaccess ou httpd.conf, você terá inserção html em toda a sua página:

 <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 é onde você coloca seu file html ou php, na minha situação é C: /xampp/apache/cgi-bin/footer.php, mas você pode colocá-lo em qualquer lugair , apenas dê o path certo, você estairá bem

Mod Layout agora é obsoleto e se você não quer a sobrecairga de chamair um script externo, a melhor solução que funcionou paira mim foi mod . Você pode usair mod sed paira combinair a primeira linha do doc (1s) e adicionair o código do script de header lá e corresponder a última linha ($ s) e colocair o rodapé lá.

 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" 
  • Como posso export regras de reescrita de URL?
  • Nginx - como desativair a reescrita paira a página de erro
  • Htaccess com vários pairâmetros
  • Apache - Devo usair "ProxyPass ..." ou "RewriteRule ... " paira solicitações de proxy?
  • Modalidade de substituição condicional paira configurair o directory raiz (apache htaccess)
  • mod_rewrite não encaminha os pairâmetros GET
  • Nginx Try_Files paira criair o cache de conteúdo local?
  • Apache Reescreva paira Alterair o Caminho URI
  • Bloqueie um hash exclusivo no URL através do NGINX