Можно ли использовать mod_rewrite, чтобы найти более старую версию файла?

Скажем, на сервере есть четыре файла, которые каким-то образом содержат даты в имени файла:

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,

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 существует и т. д. Все без какой-либо математики.

Не говоря уже о том, что невозможно создать какой-то умный способ заставить все это работать как-то, но помоги Богу, кто бы ни сделал это позже.

Другие вопросы по тегам