문제

나는 실험을 해왔다. woopra.com 웹 분석 도구입니다.작동하려면 각 페이지에 자바스크립트 코드를 추가해야 합니다.이는 범용 머리글이나 바닥글이 있는 보다 동적인 사이트에서는 충분히 쉬우나 완전히 정적인 HTML 페이지에서는 그렇지 않습니다.

나는 Apache 재작성 및 SSI의 조합을 사용하여 정적 HTML을 필수 코드로 "래핑"함으로써 이 문제를 해결하려고 시도했습니다.예를 들어...

Apache 구성을 다음과 같이 변경했습니다.

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !=test.shtml
    RewriteCond %{IS_SUBREQ}  false 
    RewriteRule (.*)\.html test.shtml?$1.html

test.shtml 파일에는 다음이 포함되어 있습니다.

    <script type="text/javascript">
       var XXXXid = 'xxxxxxx';
    </script>
    <script src="http://xxxx.woopra.com/xx/xxx.js"></script>

    <!--#set var="page" value="$QUERY_STRING" -->
    <!--#include virtual= $page -->

아이디어는 다음과 같은 요청이 들어오는 것이었습니다.

    /abc.html

다음으로 리디렉션됩니다.

    /test.shtml?abc.html

그런 다음 shtml은 원본 파일을 응답 페이지에 포함합니다.

불행히도 그것은 계획대로 작동하지 않습니다 :) 누구든지 내가 뭘 잘못하고 있는지 보거나 대체 접근 방식을 제안할 수 있습니다.동일한 작업을 수행할 수 있는 아파치 모듈이 있습니까?바람직하게는 사이트별로 구성할 수 있습니다.

감사해요

베드로

도움이 되었습니까?

해결책

내 생각에는 mod_filter_ext 당신이 찾고 있는 모듈입니다.예를 들어 짧은 Perl 스크립트를 작성하여 페이지에 JS 코드를 삽입하고 HTML 페이지를 처리하도록 등록할 수 있습니다.

while (<>) {
    s/<html>/\Q<script>....\E/;
    print $_;
}

다음과 같은 것을 사용할 수도 있습니다. sed 대체를 수행합니다.

다른 팁

페이지가 정적이라면 사이트의 모든 페이지를 전처리하고 필요한 자바스크립트를 각 페이지에 추가하는 대신 왜 즉시 페이지를 변경하겠습니까?이는 간단하고 아마도 더 효율적일 것입니다(변경할 페이지보다 페이지 조회수가 더 많을 것입니다).

이것은 다양한 방법으로 수행될 수 있습니다.인라인 교체를 위해 작은 Perl을 제안합니다.

좋습니다. 위 방법의 가장 큰 문제는 스크립트 태그를 외부에 배치하면 HTML 유효성이 손상된다는 것입니다. <html> 태그

나는 sed/awk 스크립트와 같은 HTML 파일에 대한 사전 프로세스 실행에 대해 다른 사람들의 의견에 동의합니다.

여기에 간단한 예가 있습니다. {스크립트 부분이 </head>그리고 그 </head> 개행의 시작 부분에 있습니다

#!/bin/bash

cd /var/webserver/whatever/

grep -r '<\/head>' */*|grep "^.*\.html*:" >/var/tmp/tempfile.txt
((lines = $(wc -l /var/tmp/dom-tempfile.txt | awk '{print $1}')))
if [ $lines -gt 0 ]
then
 while read line; do
 sed 's/<script type="text\/javascript"> var XXXXid = "xxxxxxx"; <\/script><script src="http:\/\/xxxx\.woopra\.com\/xx\/xxx\.js"><\/script><\/head>/^<\/head>/g' $line>/var/tmp/tempfile.htm
 mv /var/tmp/tempfile.htm $line
 done < <(sed 's/\(^.*\.html*\):.*$/\1/' /var/tmp/tempfile.txt)
fi
exit 0

이후 구문 오류가 있을 수 있습니다. $page 는 따옴표에 포함되지 않지만 이것이 포함되지 않는 두 가지 주요 이유는 다음과 같습니다.

  • /로 시작하는 경로에 가상을 포함해야 합니다. 예에서 쿼리 문자열은 abc.html이 아니라 /abc.html이어야 합니다.
  • 다시 쓰기 규칙도 경로로 시작해야 하므로 다시 쓰기 규칙은 다음과 같아야 합니다.

    RewriteRule ^(.*)\.html /test.shtml?$1.html
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top