2016-08-15 5 views
0

Я хочу заменить внутри VirtualHost </body> элемент с:VirtualHost модуль для поиска и замены HTML-код сайта, прежде чем доставлен клиенту

<!-- Piwik --> 
<script type="text/javascript"> 
    var _paq = _paq || []; 
    _paq.push(['trackPageView']); 
    _paq.push(['enableLinkTracking']); 
    (function() { 
    var u="//stats.mydomain.com/"; 
    _paq.push(['setTrackerUrl', u+'piwik.php']); 
    _paq.push(['setSiteId', '1']); 
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 
    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); 
    })(); 
</script> 
<noscript><p><img src="//stats.mydomain.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript> 
<!-- End Piwik Code --></body> 

мне нужно сделать это внутри секции VirtualHost, потому что я не могу напрямую изменять код сайта ,

Я думал о некоторых модулях apache, таких как mod_substitute, mod_sed, mod_include.

Мне нужно добавить этот статистический код PIWIK на каждую страницу.

Это хороший способ? Какой из этих модов будет лучше всего сделать это? Или, может быть, есть другое решение?

+0

'mod_includes'. Другие должны выполнять поиск-замену. Ваше требование здесь не так. – hjpotter92

+0

Я не вижу, как я могу использовать этот 'mod_include' – BlueMark

ответ

0

Ниже раствор с mod_ext_filter который выглядит очень мощным:

  1. Включить Apache модуль:

    a2enmod ext_filter 
    
  2. файл конфигурации
  3. Внутри Apache, в VirtualHost разделе, добавить определение фильтра :

    ExtFilterDefine my_html_filter mode=output intype=text/html cmd="/usr/bin/php5 /var/www/data/myfilter.php" 
    SetOutputFilter my_html_filter 
    
    • ExtFilterDefine - эта директива определяет фильтр
    • my_html_filter - это наш фильтр
    • mode=output - говорит Apache, чтобы обработать ответ
    • intype=text/html - определяет тип MIME документов, которые должен быть отфильтрован
    • cmd="/usr/bin/php5 /var/www/data/myfilter.php" - определяет внешняя команда для запуска
    • SetOutputFilter - эта директива активирует фильтр
  4. Содержание PHP файла /var/www/data/myfilter.php:

    <?php 
    
    $stdin = fopen('php://stdin', 'r'); 
    while($line = fgets($stdin)){ 
    $line = str_replace('</body>'," 
    <!-- Piwik --> 
    <script type='text/javascript'> 
        var _paq = _paq || []; 
        _paq.push(['trackPageView']); 
        _paq.push(['enableLinkTracking']); 
        (function() { 
        var u='//stats.mydomain.com/'; 
        _paq.push(['setTrackerUrl', u+'piwik.php']); 
        _paq.push(['setSiteId', '1']); 
        var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 
        g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); 
        })(); 
    </script> 
    <noscript><p><img src='//stats.mydomain.com/piwik.php?idsite=1' style='border:0;' alt='' /></p></noscript> 
    <!-- End Piwik Code --> 
    </body>", $line); 
    
    echo $line; 
    } 
    fclose($stdin); 
    
    ?> 
    
  5. Перезапуск Apache:

    service apache2 restart