RewriteCond を任意の http要求ヘッダーに基づいて簡単に作成できることはわかっています。しかし、送信される応答ヘッダー (の一部) を確認できますか? 特に、最終変更されたものは?
最終変更日が 30 分より前の場合にのみ URL を書き換えたいのですが、そのディレクトリからのファイルが要求されるたびに、そのチェックを php ファイルに委譲するオーバーヘッドを回避しようとしています。
前もって感謝します!
RewriteCond を任意の http要求ヘッダーに基づいて簡単に作成できることはわかっています。しかし、送信される応答ヘッダー (の一部) を確認できますか? 特に、最終変更されたものは?
最終変更日が 30 分より前の場合にのみ URL を書き換えたいのですが、そのディレクトリからのファイルが要求されるたびに、そのチェックを php ファイルに委譲するオーバーヘッドを回避しようとしています。
前もって感謝します!
いいえ、それは不可能です。しかし、書き換えマップを使用して、PHP よりもオーバーヘッドが少ないプログラム (おそらくシェル スクリプト) からその情報を取得できます。
以下に bash スクリプトの例を示します。
#!/usr/bin/env bash
while read line; do
max_age=${line%%:*}
filename=${line#*:}
if [[ -f $filename ]]; then
lm=$(stat -f %m "$filename")
if [[ $(date +%s)-$lm -le $max_age ]]; then
echo yes
else
echo no
fi
else
echo no
fi
done
プログラムは一度だけ開始され、入力を待機するため、書き換えマップの宣言をサーバーまたは仮想ホスト構成ファイルに配置する必要があります。
RewriteMap last-modified-within prg:/absolute/file/system/path/to/last-modified-within.sh
そして、その書き換えマップを次のように使用できます (.htaccess の例):
RewriteCond %{last-modified-within:30:%{REQUEST_FILENAME}} =yes
RewriteRule ^foo/bar$ - [L]
RewriteRule ^foo/bar$ script.php [L]
much
アウトバウンド ヘッダーは、動作するまで存在しませんmod_rewrite
。に組み込まれているファイル変更時間チェック機能もありませんmod_rewrite
。そのため、これを使用するのに最も近いのは、問題のファイルが変更されているかどうかを調べるために、さまざまな外部書き換えプログラムのRewriteMapを作成することです。
あなたのアプリケーションを正しく理解していれば、cron ジョブでそのディレクトリ内の 30 分以上経過したファイルを削除し、ファイルが存在しない状態で再書き込みすることも検討できます。
mod_proxy、mod_cache、squid の使用を検討しましたか? 独自のキャッシングをロールしようとしているようです...