静的HTMLページを配信するApache web server
があります。何らかの理由でファイル自体を変更することはできませんが、それでも、配信されるすべてのページに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_rewriteとSSIでこれを行うことを好みます。
最初にパスを環境変数に入れます
RewriteCond%{IS_SUBREQ} false RewriteRule ^(/.* \。html)/page.shtml [E:filename:$ 1]
それをshtmlファイルで処理します
<!-#include virtual = "$ filename"->
(このソリューションの一部は、stackoverflowの質問に基づいています https://stackoverflow.com/questions/40133/getting-Apache-to-modify-static-webpages-on-the-fly/1196832 )
これはチュートリアルです Webページ上のリンク(コンテンツ)を編集するための mod_proxy_html の使用方法。これを適用して、必要なHTMLを変更できる場合があります。
更新:このルートに移動してもよろしいですか? Apacheはコンテンツを提供するためのものであり、作成するためのものではないと思います。これはおそらくMVCフレームワークのビュー部分に入るでしょう。私がこれをお勧めしない理由は、あなたが モジュール性の規則 を破っているからです。 Webアプリケーションは、それを処理するアプリケーションと絡み合い、将来のアップグレード、移動などを複雑にします。
mod_sed が適しています。たとえば、終了ヘッドまたは本文タグに一致する出力フィルターを作成し、その前にHTMLを挿入できます。
Mod_Perlモジュールはどんな用途ですか?
http://search.cpan.org/~gozer/Apache2-Layout-0.6/lib/Apache2/Layout.pm
それはあなたが望むことをするかもしれません、または少なくとも、あなたを正しい方向に向けます。
以下のディレクティブを使用して、Apacheのヘッダーおよびフッターディレクティブを調べることができます。
<Directory "/usr/local/www/data/scott">
Options +Indexes
AllowOverride All
AddOutputFilter LAYOUT html htm shtml
LayoutComment On
LayoutHeader /wrappers/scott-header.html
LayoutFooter /wrappers/scott-footer.html
</Directory>
Apache mod_substituteを使用して、いくつかの基準または正規表現を使用して、htmlを発信応答に挿入できます。 ここ はこれを実現する方法の説明です。
Mod Layoutは廃止されました。外部スクリプトを呼び出すオーバーヘッドが不要な場合、私にとって有効な最善の解決策は mod sed でした。 mod sedを使用してdocの最初の行(1s)を照合し、そこにヘッダースクリプトコードを追加して、最後の行($ s)を照合し、そこにフッターを配置できます。
Options Indexes FollowSymLinks Includes ExecCGI
Order Deny,Allow
Deny from none
Allow from all
Require all granted
AddOutputFilter Sed html
SetOutputFilter Sed;DEFLATE
OutputSed "1s|^|<header code>|"
OutputSed "$s|$|</footer code>|g"
apacheを介してすべてのページにHTMLを挿入できますが、Apacheプロキシサーバーを介してすべてのサイトではなく、Apacheによってホストされているサイトに対してのみです。
これがどのように機能するかです。 XAMPPをセットアップし、Apache 2.4用のmod_layout 5.1をダウンロードします。 (mod_layoutのインストールは簡単です。WindowsでXAMPPを使用している場合は、Windowsでmod_layout.so 5.1をダウンロードしてApacheモジュールフォルダー$ home/Apache/moduleに配置し、構成DSOをhttpd.conf LoadModule layout_module modules /に追加します。 mod_layout.so-Linuxまたはその他のOSを使用している場合は、Linux用のmod_layout.soをダウンロードしてから、makeコマンドを実行してインストールする必要があります)
Windows用のmod_layout.soをインストールした後、このコードを.htaccessファイルまたはhttpd.confに配置するだけで、すべてのページにHTML挿入が行われます。
<IfModule mod_layout.c>
AddOutputFilter LAYOUT html
AddOutputFilter LAYOUT htm
AddOutputFilter LAYOUT shtml
AddOutputFilter LAYOUT shtm
AddOutputFilter LAYOUT cgi
AddOutputFilter LAYOUT php
LayoutFooter "C:/xampp/Apache/cgi-bin/footer.php"
</IfModule>
C:/xampp/Apache/cgi-bin/footer.phpは、htmlまたはphpファイルを配置する場所です。私の状況では、C:/xampp/Apache/cgi-bin/footer.phpですが、どこに配置してもかまいません。 、ちょうど正しい道を与えてください、あなたは大丈夫です