6

RewriteCond を任意の http要求ヘッダーに基づいて簡単に作成できることはわかっています。しかし、送信される応答ヘッダー (の一部) を確認できますか? 特に、最終変更されたものは?

最終変更日が 30 分より前の場合にのみ URL を書き換えたいのですが、そのディレクトリからのファイルが要求されるたびに、そのチェックを php ファイルに委譲するオーバーヘッドを回避しようとしています。

前もって感謝します!

4

3 に答える 3

9

いいえ、それは不可能です。しかし、書き換えマップを使用して、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]
于 2009-08-23T09:15:41.420 に答える
0

muchアウトバウンド ヘッダーは、動作するまで存在しませんmod_rewrite。に組み込まれているファイル変更時間チェック機能もありませんmod_rewrite。そのため、これを使用するのに最も近いのは、問題のファイルが変更されているかどうかを調べるために、さまざまな外部書き換えプログラムのRewriteMapを作成することです。

あなたのアプリケーションを正しく理解していれば、cron ジョブでそのディレクトリ内の 30 分以上経過したファイルを削除し、ファイルが存在しない状態で再書き込みすることも検討できます。

于 2009-08-23T09:17:10.293 に答える
0

mod_proxy、mod_cache、squid の使用を検討しましたか? 独自のキャッシングをロールしようとしているようです...

于 2009-08-23T09:54:01.637 に答える