الحصول على أباتشي إلى تعديل صفحات الويب ثابتة على الطاير
سؤال
لقد تم تجريب woopra.com أداة تحليلات ويب.الأمر الذي يتطلب قطعة من شفرة جافا سكريبت إضافة إلى كل صفحة على وظيفة.هذا من السهل بما فيه الكفاية مع أكثر المواقع الديناميكية مع العالمي رؤوس أو تذييلات الصفحات ولكن ليس تماما صفحات html ثابتة.
حاولت عمل جولة ذلك باستخدام مزيج من أباتشي يعيد كتابة مباحث أمن الدولة إلى "التفاف" html ثابتة مع رمز المطلوبة.على سبيل المثال...
وإجراء التغييرات التالية إلى اباتشي التكوين
RewriteEngine On
RewriteCond %{REQUEST_URI} !=test.shtml
RewriteCond %{IS_SUBREQ} false
RewriteRule (.*)\.html test.shtml?$1.html
الاختبار.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
the shtml ثم تشمل الملف الأصلي في صفحة استجابة.
للأسف الأمور لا تسير كما خططت :) يمكن لأي شخص رؤية ما أفعله خطأ أو ربما تشير إلى نهج بديل.هل هناك أي وحدات اباتشي التي يمكن أن تفعل الشيء نفسه.ويفضل التي يمكن تكوينها على أساس لكل موقع.
شكرا
بيتر
المحلول
أعتقد أن mod_filter_ext هو وحدة كنت تبحث عن.يمكنك كتابة قصيرة Perl على سبيل المثال لإدراج رمز شبيبة في صفحات وتسجيل ذلك إلى عملية صفحات HTML:
while (<>) {
s/<html>/\Q<script>....\E/;
print $_;
}
يمكنك حتى استخدام شيء من هذا القبيل sed
إلى إجراء تبديل.
نصائح أخرى
إذا كانت صفحات ثابتة, لماذا قمت بتغيير لهم على الطاير بدلا من تجهيزها في جميع الصفحات على الموقع ، إضافة قطعة من requiered جافا سكريبت إلى كل واحد منهم ؟ هذا هو بسيط و ربما أكثر كفاءة (ربما لديك أكثر من صفحة من صفحات للتغيير)
هذا يمكن القيام به الكثير من طريقة.أود أن أقترح صغيرة بيرل إلى أن مضمنة الاستبدال.
طيب الطريقة أعلاه المشكلة الأكبر هو كسر الخاص بك html صحة من خلال وضع علامة النصي خارج <html>
tags
أود أن نتفق مع الآخرين على ما قبل عملية دهس ملفات html الخاص بك مثل sed/awk النصي
هيريس سريع سبيل المثال {افتراض السيناريو جزء يمكن أن تضاف قبل </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