Apache Alias ​​имя файла - PullRequest
       3

Apache Alias ​​имя файла

3 голосов
/ 27 апреля 2011

Используя Apache и mod_rewrite, я могу переписать сложный запрос в простое имя файла, например:

RewriteRule ^shortcut/(.*)$ /long/way/around/$1

Может ли это работать наоборот? Я хочу, чтобы простой запрос был переписан в неизвестный файл, но я могу определить, какой файл должен обслуживаться, по уникальному идентификационному номеру с префиксом его имени файла. Я хочу, чтобы Apache «угадал» с помощью регулярного выражения, какой файл обслуживать на основе идентификатора.

Например:

GET /img/29281.jpg

Directory of /img/:
...
29280-filename-here.jpg
29281-other-filename-here.jpg  <-- Apache should serve this one
29282-more-files-here.jpg
...

Итак, переписывание регулярного выражения может быть:

^(\d+)\.jpg$   -->   ^$1\-[a-zA-Z0-9-_]+.jpg$

Как интегрировать это в Apache (если это возможно)?

Большое спасибо за любые предложения.

P.S. Переименование всех имен файлов в простой идентификационный номер не вариант в этом случае.

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Я думаю, что один из способов Apache - это использовать mod-rewrite с директивой RewriteMap и использовать отображение : prg карты перезаписи.

Это приведет к загрузке при запуске apache простой программы (может быть perl, как предложено в документации, программа PHP может получить больше памяти и проблем с производительностью, IMHO).Эта программа должна выполнить последнюю часть предположения имени файла.

Вы можете найти некоторые примеры таких программ здесь (PHP) , там (C) , и здесь базовая Perl .

Мне не хватает perl-поддержки в моем мозгу, чтобы получить perl-способ извлечения реального имени файла, используя расширение и идентификатор int, но это должно быть легко и коротко (что важно для PRG rewriteMap).

0 голосов
/ 14 июня 2011

Вы можете использовать PHP-скрипт в качестве ErrorDocument для страницы 404. Этот скрипт найдет нужный файл и отправит перенаправление на нужный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...