0

假设服务器上有四个文件以某种方式在文件名中包含日期:

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 可以用来查找列表中的下一个文件,当按reverse-alphabetally 排序时。

例子:

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 回答