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

Apache: отображение нескольких каталогов в одно и то же место

Я хотел бы сопоставить несколько каталогов с одним и тем же местом с Apache, ожидая поведения, аналогичного этому: предположим, что /static местоположение должно поддерживаться каталогами /srv/static1 и /srv/static2. Тогда если /static/image.png запрашивается, я хотел бы, чтобы Apache проверил файлы /srv/static1/image.png и /srv/static2/image.png, в этой последовательности. Возвращается первый найденный файл; если ни один из них не найден, возвращается классическая ошибка 404.

Конечно, решение состоит в том, чтобы использовать сценарий для создания каталога символических ссылок, указывающих на нужное место, и использовать его, например, в Alias директива. Интересно, есть ли более прямой способ, который не требует от меня развертывания дополнительного оборудования.

Спасибо!

Это легко сделать с помощью mod_rewrite. Вы можете настроить его так, чтобы он имел условие, что если файл не существует в первом каталоге, он должен искать его во втором, и так далее.

Вот краткий пример конфигурации; для получения дополнительной информации см. канонический вопрос о mod_rewrite и документация apache mod_rewrite.

RewriteEngine on

# first try to find it in dir1/...
# ...and if found stop and be happy:
RewriteCond %{DOCUMENT_ROOT}/dir1/%{REQUEST_URI} -f
RewriteRule ^(.+) %{DOCUMENT_ROOT}/dir1/$1 [L]

# second try to find it in dir2/...
# ...and if found stop and be happy:
RewriteCond %{DOCUMENT_ROOT}/dir2/%{REQUEST_URI} -f
RewriteRule ^(.+) %{DOCUMENT_ROOT}/dir2/$1 [L]

# else go on for other Alias or ScriptAlias directives,
# etc.
RewriteRule ^ - [PT]