0

サーバー上に、何らかの方法でファイル名に日付を含む 4 つのファイルがあるとします。

file_2014-01-20.txt
file_2014-01-03.txt
file_2014-01-02.txt
file_2014-01-01.txt

...そしてサーバーは、存在しない日付付きファイルのリクエストを受け取ります:

file_2014-01-10.txt

...要求されたものよりも古い最新のファイルを見つけるために使用する方法mod_rewriteまたは他のコードはありますか? .htaccessたとえば、この場合file_2014-01-03.txt、(存在しない) 要求されたファイルよりも古い最新の既存のファイルであるため、 が返されます。

すべての 404 を次のような特別なスクリプトにリダイレクトできることはわかっています。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+) getarchive.php?request=$1

...どこでgetarchive.php取得requestして使用し、正しいファイルを見つけて返します。.htaccessただし、これはいくつかの理由で私にとっては良い解決策ではありません。可能であれば、サーバー側のスクリプトをまったく使用せずに完全にリダイレクトしたいと考えています。

編集:

質問を別の言い方をすれば、存在しないファイル名が与えられた場合、 Apacheを使用してリスト内の次のファイルを見つけることができますか?

例:

a.txt
b.txt
z.txt

に対する要求が与えられるとn.txt、サーバーは を返しますb.txt

4

1 に答える 1

1

これを行うためのスクリプトを作成するだけで、はるかにうまくいくでしょう。mod_rewrite を使用した日付比較は、誰かがそれを行うことができたとしても、恐ろしい考えのように思えます。過去数年間はどのようにコーディングしますか? (file_2013-12-30.txt や file_2014-01-30.txt など)

mod_rewrite の機能は、この種の比較を行うにはまったく不十分です。

年、月、日のグループを作成し、条件を使用せずにそれらすべてを比較する必要があります (mod_rewrite には If/Then/Else はありません。すべてのルールについて、可能なすべての条件を毎回列挙する必要があります)。 )または制御されたループ、算術関数なし、および日付、日付/月、または日付/月/年の次に小さい番号を持つファイルを見つける手段なし. file_2014-01-10.txtつまり、ファイルfile_2014-01-09.txtが存在するかどうか、file_2014-01-08.txt存在するかどうか、存在するかどうかなどを確認する必要があるような要求の場合、file_2014-01-07.txtすべて計算を行うことができません。

どういうわけかすべてを機能させるための巧妙な方法を作成することが不可能だと言っているわけではありませんが、後で微調整する必要がある人は誰でも助けてください.

于 2014-01-31T19:40:31.733 に答える