Назад | Перейти на главную страницу

Apache2 извлекает файлы из другой папки, если не найдены

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

Есть 2 приложения:

<VirtualHost *:80>
    ServerName legacy.dev
    DocumentRoot /www/legacy/webroot
</VirtualHost>
<VirtualHost *:80>
    ServerName new.dev
    DocumentRoot /www/new/webroot
</VirtualHost>

Как я могу настроить new.dev VirtualHost для получения файлов, присутствующих в DocumentRoot, но если файл не найден, получить файлы в legacy.dev DocumentRoot?

Это звучит как Что такое Apache-эквивалент try_files Nginx? будет делать то, что вы хотите.

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]

пытается найти файл и, если не находит, передает его прокси-серверу apache. Apache: мод-перезапись для поиска отсутствующих изображений в другом каталоге показывает аналогичный пример использования mod_rewrite для выполнения чего-то подобного без проксирования. Как видите, он использует аналогичный RewriteCond но совсем другой RewriteRule с которым может быть легче работать.

Как вы можете заметить, первый упомянутый ответ пытается взломать nginx try-files в apache, так что, может быть, в этом случае вам больше понравится nginx. Как работает try_files? должен дать вам лучшее представление, если это поможет вам.