В нашей существующей настройке Apache у нас есть файл .htaccess в папке, который перенаправляет все запросы обработчику PHP. Например:
Для этого URL-запроса:
.Htaccess - это простое перенаправление 404:
ErrorDocument 404 handleImage.php
Существует множество папок "userXX", которые символически ссылаются на одну и ту же папку "/ imageDB", которые должны обрабатываться таким же образом, и поскольку файл .htaccess находится там, он выбирается каждый раз, например
НО есть также много папок "userXX", которые символически ссылаются на другую папку для кэшированных изображений, "/ imageCache", например
Это прямая выборка изображений, без использования PHP-скриптов.
Теперь мы переходим к настройке Nginx, и я узнал, что Nginx не разрешает файлы .htaccess (из-за снижения производительности каждый раз, когда они читаются), и любые настройки перенаправления должны быть выполнены в основном файле конфигурации Nginx и прочитаны при запуске / перезагрузке.
У меня есть рабочая конфигурация Nginx для примера папки следующим образом: -
location /gallery/user01/ {
fastcgi_intercept_errors on;
error_page 404 = /gallery/user01/handleImage.php;
}
... но, как вы можете видеть, это просто обрабатывает папку «user01», но мы хотим добавить множество папок «userXX», которые символически ссылаются на папки «/ imageDB» или «/ imageCache».
Это как если бы я хочу создать регулярное выражение, которое обнаруживает часть входящего запроса «/ gallery / userXX», проверяет, существует ли файл «handleImage.php» в конечной папке, и затем вызываю его, иначе это прямое кешированное изображение получить.
Будет ли это правильным способом реализовать это? И любая помощь с регулярным выражением будет оценена, спасибо.
Я считаю, что правильной конфигурацией для вашего варианта использования будет установка местоположения на /gallery/
и error_page
к /gallery/imageDB/handleImage.php
.
Это должно перехватить все запросы, попытаться вернуть запрошенный файл и, если он не найден, нажать скрипт handleImage, чтобы вернуть его.
Вы хотите убедиться, что disable_symlinks
директива отключена для того, чтобы это работало - я предполагаю, что это уже для вашей папки примера.