回答:
あなたはこれを行うことができます:mod_rewriteを使用してリクエストを変更します
/some/static/page.html
に
/htmlinjector.php?url=/some/static/page.html
次に、PHP(または適切と思われるもの)を使用してファイル操作を行います。出力キャッシュを追加して、パフォーマンスを改善します。
別の方法として、Apacheハンドラーは便利に聞こえます:
CGIスクリプトを使用して静的コンテンツを変更する
次のディレクティブにより、
html
拡張子を持つファイルのリクエストがfooter.pl
CGIスクリプトの起動をトリガーし ます。Action add-footer /cgi-bin/footer.pl AddHandler add-footer .html
次に、CGIスクリプトは、最初に要求されたドキュメント(
PATH_TRANSLATED
環境変数によってポイントされる)を送信し、 必要な変更や追加を行います。
これは多かれ少なかれmod_rewriteアプローチが行うことであり、ハッカーが少なくなります。
ScriptAlias
と<Directory /some/static/>...</Directory>
、 <Directory /path/to/cgi-bin/> Options +ExecCGI</Directory>
私は、ユーザーの回答を改ざんする必要はありませんが、あなたが要求した場合、私はより多くの情報を与えるなど。
<?php ob_start(); include("/some/static/page.html"); $contents = ob_get_contents(); ob_end_clean(); echo str_replace('</head>', '<script async>Some script content goes here like adsense code</script></head>', $contents) ?>
$ contentを使用して、残りのページコンテンツをロードします。あなたはhtmlinjector.phpまたは何としてこのファイルを保存して、このようなあなたのhtaccessファイルでそれを呼び出すことができますOptions +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} /some/static/page.html RewriteRule ^(.*)$ /htmlinjector.php?url=/some/static/page.html
なぜこれが回答リストに記載されていないのか分かりません。この質問を見るのに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を使用してWebページ(コンテンツ)のリンクを編集する方法のチュートリアルを次に示します。これを適用して、必要なhtmlを変更できる場合があります。
更新:このルートに移動してもよろしいですか?Apacheはコンテンツを作成するためのものであり、作成するためのものではないと思います。これはおそらくMVCフレームワークのビュー部分に含まれます。私がこれをお勧めしない理由はあなたがモジュール性の規則を破っているからです。Webアプリケーションは、それをサーバーするアプリケーションと絡み合い、将来のアップグレード、移動などを複雑にします。
mod_rewriteとSSIでこれを行うことを好むでしょう。
最初にパスを環境変数に入れます
RewriteCond%{IS_SUBREQ} false RewriteRule ^(/.* \。html)/page.shtml [E:ファイル名:$ 1]
それをshtmlファイルで処理します
<!-#include virtual = "$ filename"->
(このソリューションの一部は、stackoverflowの質問/programming/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832に基づいています)
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>
Modレイアウトは現在廃止されており、外部スクリプトを呼び出すオーバーヘッドが必要ない場合、私にとって有効な解決策は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を使用する場合は、mod_layout.so 5.1をWindowsにダウンロードして、apacheモジュールフォルダー$ home / apache / moduleに配置し、config DSOをhttpd.conf LoadModule layout_module modules /に追加します。 mod_layout.so-Linuxまたは他のOSを使用している場合は、Linux用のmod_layout.soをダウンロードし、makeコマンドを実行してインストールする必要があります)
mod_layout.soをWindowsにインストールした後、次のコードを.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ですが、どこにでも置くことができます、ちょうど正しい道を与える、あなたは大丈夫だよ