Как перенаправить запросы изображений в другой каталог через .htaccess? - PullRequest
0 голосов
/ 23 декабря 2018

Изображения находятся в папке по первым 2 символам имени файла, например, файл stack_help_me.jpg будет находиться в папке /mnt/images/st/stack_help_me.jpg.

Задачачтобы сделать так, чтобы все запросы на изображения из определенной подпапки (например, загрузки) были перенаправлены в нужный файл.Например, от /wp-content/uploads/2018/12/stack_help_me.jpg до /mnt/images/st/stack_help_me.jpg.

Как сделать это чисто в .htaccess и возможно ли это?

Это кажется понятным в PHP(хотя, вероятно, с ошибками относительно правил .htaccess).Вот что я попробовал:

.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} /wp-content/uploads/\.(jpg|jpeg|png|gif)$ [NC]
RewriteRule (.*) navigator.php?&src=$1 [L]
</IfModule>

navigator.php

$real_img_path = '/mnt/images';
$full_path = $_GET['src']; // /wp- 
content/uploads/2018/12/toster_help_me.jpg
$only_fname = substr($full_path, strrpos($full_path, '/') + 1); // 
toster_help_me.jpg
$image = $real_img_path . '/' . substr($only_fname, 0, 2) . '/' . 
$only_fname; // /mnt/images/to/toster_help_me.jpg
fpassthru(fopen($image, 'rb'));

1 Ответ

0 голосов
/ 23 декабря 2018
RewriteCond %{REQUEST_URI} /wp-content/uploads/\.(jpg|jpeg|png|gif)$ [NC]

... и использование только htaccess невозможно.

Использование только .htaccess возможно .Однако приведенное выше регулярное выражение не будет соответствовать запросу в форме /wp-content/uploads/2018/12/stack_help_me.jpg (как в вашем примере).

Вы можете сделать что-то вроде следующего в верхней части файла .htaccess, до любые существующие директивы:

RewriteEngine On

RewriteRule ^wp-content/uploads/\d{4}/\d\d/((..).*\.jpg)$ /mnt/images/$2/$1 [L]

Это специально соответствует URL-адресам формы /wp-content/uploads/<year>/<month>/<filename>.jpg, где <year> - любая 4-значная последовательность, а <month> - любая 2-значная последовательность.Вы можете быть настолько специфичными или общими с регулярным выражением, сколько требуется.

$1 - это обратная ссылка на первый захваченный подшаблон, например.stack_help_me.jpg$2 - это обратная ссылка на второй захваченный подшаблон (внутри первого), а именно первые два символа имени файла, например, st.

PHP не требуется.

ОБНОВЛЕНИЕ: Если /mnt/images фактически находится на другом жестком диске (за исключением DocumentRoot), но на том же сервере, то вам нужно будет создать Alias в конфигурации сервера для сопоставления /mnt/imagesв локальное пространство URL.Вам также понадобится соответствующий контейнер <Directory>, который позволит получить доступ к этому местоположению.Даже если вы в конечном итоге используете PHP для извлечения изображений, вам все равно потребуется предоставить доступ PHP.

Чтобы перенаправить запрос к сценарию PHP, вы можете изменить указанную выше директиву, как показано ниже:

RewriteRule ^wp-content/uploads/\d{4}/\d\d/(.+\.jpg)$ navigator.php?src=$1 [L]

Параметр URL src будет содержать только базовое имя запрашиваемого файла.

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