답변:
당신은 이것을 할 수 있습니다 : 요청을 변경하기 위해 mod_rewrite로 작업하십시오.
/some/static/page.html
에
/htmlinjector.php?url=/some/static/page.html
그런 다음 PHP (또는 적절한 것으로 찾은 것)를 사용하여 파일 조작을 수행하십시오. 성능 향상을 위해 출력 캐시를 추가하십시오.
대안으로 Apache Handlers 가 도움이됩니다.
CGI 스크립트를 사용하여 정적 컨텐츠 수정
다음 지시문은
html
확장자 가있는 파일에 대한 요청으로footer.pl
CGI 스크립트 의 실행을 트리거합니다 .Action add-footer /cgi-bin/footer.pl AddHandler add-footer .html
그런 다음 CGI 스크립트는 원래 요청 된 문서 (
PATH_TRANSLATED
환경 변수가 가리키는)를 전송하고 원하는대로 수정하거나 추가 할 책임 이 있습니다.
이것은 mod_rewrite 접근 방식이 해커가 적은 경우와 거의 비슷합니다.
ScriptAlias
과 <Directory /some/static/>...</Directory>
, <Directory /path/to/cgi-bin/> Options +ExecCGI</Directory>
I는 사용자의 대답을 조작하고 싶지 않지만 당신이 요청하는 경우, 내가 더 많은 정보를 줄 것 등.
<?php ob_start(); include("/some/static/page.html"); $contents = ob_get_contents(); ob_end_clean(); echo str_replace('</head>', '<script async>Some script content goes here like adsense code</script></head>', $contents) ?>
$ content를 사용하여 나머지 페이지 내용을로드하십시오. 이 파일을 htmlinjector.php로 저장하거나 htaccess 파일에 다음과 같이 호출 할 수 있습니다.Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} /some/static/page.html RewriteRule ^(.*)$ /htmlinjector.php?url=/some/static/page.html
왜 이것이 답변 목록에 언급되지 않았는지 잘 모르겠습니다. 이 질문을 보는 데 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);
?>
모든 "a"가 "A"로 바뀝니다.
다음과 같이 httpd.conf에서 필터를 활성화하십시오.
LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so
이 질문은 Google에서 실제로 순위가 높으며 포럼 측면에서 그다지 많지 않습니다
다음은 mod_proxy_html 을 사용 하여 웹 페이지 (컨텐츠)의 링크를 편집하는 방법에 대한 자습서 입니다 . 원하는 html을 수정하여 적용 할 수 있습니다.
업데이트 :이 경로를 가고 싶습니까? 나는 아파치가 컨텐츠를 만드는 것이 아니라 컨텐츠를 제공하기위한 것이라고 생각한다. 이것은 아마도 MVC 프레임 워크의보기 부분에있을 것입니다. 내가 이것을 권장하지 않는 이유 는 모듈성의 규칙을 어 기고 있기 때문입니다 . 웹 응용 프로그램은 웹 응용 프로그램과 서버를 연결하여 향후 업그레이드, 이동 등을 복잡하게 만듭니다.
나는 mod_rewrite와 SSI로 이것을 선호합니다.
먼저 경로를 환경 변수에 넣으십시오.
RewriteCond % {IS_SUBREQ} 거짓 RewriteRule ^ (/.* \. html) /page.shtml [E : 파일 이름 : $ 1]
그런 다음 shtml 파일에서 처리하십시오.
<!-# include virtual = "$ filename"->
(이 솔루션의 일부는 스택 오버 플로우 질문 /programming/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832 기반으로합니다 )
mod_perl 모듈을 사용 하시겠습니까?
http://search.cpan.org/~gozer/Apache2-Layout-0.6/lib/Apache2/Layout.pm
그것은 당신이 원하는 것을 할 수도 있고, 적어도 올바른 방향으로 당신을 가리킬 수도 있습니다.
아래 지시문을 사용하여 아파치의 머리글 및 바닥 글 지시문을 살펴볼 수 있습니다.
<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/
Mod Layout은 이제 더 이상 사용되지 않으며 외부 스크립트를 호출하는 오버 헤드를 원하지 않으면 저에게 가장 적합한 솔루션은 mod sed 였습니다. mod sed를 사용하여 doc의 첫 번째 줄 (1)을 일치시키고 거기에 헤더 스크립트 코드를 추가하고 마지막 줄 ($ 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"
Apache를 통해 모든 페이지에 html을 삽입 할 수 있지만 Apache 프록시 서버를 통해 모든 사이트가 아닌 Apache에서 호스팅하는 사이트에만 html을 삽입 할 수 있습니다.
이것이 작동하는 방식입니다. XAMPP를 설정하고 Apache 2.4 용 mod_layout 5.1을 다운로드하십시오. (Windows 용 XAMPP를 사용하는 경우 mod_layout 설치는 간단합니다. Windows 용 mod_layout.so 5.1을 다운로드하여 아파치 모듈 폴더 $ home / apache / module에 넣은 다음 httpd.conf에 구성 DSO를 추가하십시오. LoadModule layout_module modules / mod_layout.so-Linux 또는 다른 os를 사용하는 경우 Linux 용 mod_layout.so를 다운로드 한 다음 make 명령을 실행하여 설치해야합니다)
Windows 용 mod_layout.so를 설치 한 후 .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입니다. , 올바른 길을 알려 주면 괜찮을거야