Подтвердить что ты не робот

Как использовать apache mod_rewrite и псевдоним одновременно?

У меня есть каталог за пределами webroot, который используется для хранения изображений, загруженных из отдельной системы администратора. Изображения сохраняются в этом формате:

filepath/writable/images/00/00/23/65/filename-236581.jpg

(где webroot - filepath/html)

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

Я хочу иметь доступ к ним с веб-сервера front-end, например:

http://(server)/filename-236581.jpg

Где filename является строкой, оптимизированной для seo, так же, как и для имени фактического файла.

Я могу получить mod-rewrite, чтобы переписать URL-адрес, чтобы он содержал дополнительные нумерованные каталоги, и я могу получить псевдоним, чтобы перенаправить запрос в каталог для записи/изображений, но я не могу делать оба одновременно. Если я добавлю оба псевдонима и директивы mod_rewrite, он игнорирует псевдоним, и журнал ошибок жалуется, что он не может найти файлpath/html/uploaded-images.

Вот что я до сих пор:

RewriteRule ^(.*)\/([^\/]*)-([0-9])\.(gif|jpg|jpeg|png)$ /uploaded-images/00/00/00/00/$2-$3.$4 [L,NC]

... и т.д., вплоть до:

RewriteRule ^(.*)\/([^\/]*)-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])\.(gif|jpg|jpeg|png)$ /uploaded-images/$3$4/$5$6/$7$8/$9$10/$2-$3$4$5$6$7$8$9$10$11$12.$13 [L,NC]

alias /uploaded-images "filepath/writable/images"

Удаление [L] не имеет значения.

4b9b3361

Ответ 1

Значок [L] означает последний.

То, что вам действительно нужно использовать, - это флаг [PT], чтобы указать, что результирующий путь из вашего правила перезаписи должен быть передан следующему обработчику, который в вашем случае является директивой alias.

Поскольку тег [PT] также подразумевает тег [L], вы больше не требуете [L].

Ответ 2

Это [L] у вас после RewriteRule означает "Last"

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