나는있어 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.pl
CGI 스크립트 의 실행을 트리거합니다
.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을 발신 응답에 삽입 할 수 있습니다.
이를 달성하는 방법에 대한 설명은 다음과 같습니다 .