전달 된 모든 HTML 페이지에 HTML 코드를 삽입하는 방법은 무엇입니까? 든 파일 자체를 변경할 수는 없지만

나는있어 Apache web server정적 HTML 페이지를 제공하는 것을. 어떤 이유로 든 파일 자체를 변경할 수는 없지만 여전히 제공되는 모든 페이지에 HTML을 삽입하고 싶습니다.

이 가능 mod_proxy합니까? 그렇지 않다면 누구나 그러한 기능을 제공하는 소프트웨어를 추천 할 수 있습니까?

수정 : 배너 광고 (예 🙂 javascript와 추적 픽셀 을 삽입해야합니다 .



답변

당신은 이것을 할 수 있습니다 : 요청을 변경하기 위해 mod_rewrite로 작업하십시오.

/some/static/page.html

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

그런 다음 PHP (또는 적절한 것으로 찾은 것)를 사용하여 파일 조작을 수행하십시오. 성능 향상을 위해 출력 캐시를 추가하십시오.

대안으로 Apache Handlers 가 도움이됩니다.

CGI 스크립트를 사용하여 정적 컨텐츠 수정

다음 지시문은 html
확장자 가있는 파일에 대한 요청으로 footer.plCGI 스크립트 의 실행을 트리거합니다
.

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

그런 다음 CGI 스크립트는 원래 요청 된 문서 ( PATH_TRANSLATED환경 변수가 가리키는)를 전송하고 원하는대로 수정하거나 추가 할 책임
이 있습니다.

이것은 mod_rewrite 접근 방식이 해커가 적은 경우와 거의 비슷합니다.


답변

왜 이것이 답변 목록에 언급되지 않았는지 잘 모르겠습니다. 이 질문을 보는 데 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_sed 가 여기에 적합합니다. 예를 들어 닫는 헤드 또는 본문 태그와 일치하는 출력 필터를 만들고 HTML을 앞에 삽입 할 수 있습니다.


답변

mod_perl 모듈을 사용 하시겠습니까?

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

그것은 당신이 원하는 것을 할 수도 있고, 적어도 올바른 방향으로 당신을 가리킬 수도 있습니다.


답변

Apache mod_substitute를 사용하여 일부 기준 또는 정규식을 사용하여 html을 발신 응답에 삽입 할 수 있습니다.
이를 달성하는 방법에 대한 설명은 다음과 같습니다 .