Это сводило меня с ума. У меня есть веб-приложение, которое обслуживается через веб-сервер Apache. Сервером базы данных, который поддерживает приложение, является Apache CouchDB, который предоставляет HTTP API для извлечения документов и потоковых вложений.
Я защитил базу данных CouchDB, предоставив объект безопасности, который позволяет только определенным пользователям получать доступ к данным в базе данных и возвращает 401 для анонимных запросов к конечным точкам HTTP.
Я хочу иметь возможность сопоставлять общедоступные URL-адреса с вложениями документов, хранящимися в этой базе данных. Итак, я попытался создать правило перезаписи в моем файле .htaccess, которое проксирует запросы с определенных URL-адресов непосредственно в CouchDB, жестко кодируя учетные данные пользователя, например:
## DOWNLOAD STREAM:
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule download/(.*) http://user:[email protected]:5984/database/$1 [P]
В идеальном мире приведенный выше пример будет иметь следующий URL-адрес:
http://domain.com/download/UUID/attachment.ext
И прокси на:
http://user:[email protected]:5984/database/UUID/attachment.ext
Этот метод действительно передает запрос CouchDB, но опускает компонент userinfo схемы URI. Итак, запрос считается анонимным, и я получаю ошибку 401. Вложение передается в потоковом режиме, только если я удаляю защиту из базы данных.
Я потратил пару часов на чтение конфигурации Apache и безрезультатные эксперименты. Веб-поиски бесплодны из-за всех связанных запросов с похожими ключевыми словами.
Как я могу убедиться, что mod_rewrite включает имя пользователя и пароль, указанные в правиле перезаписи, когда он проксирует CouchDB?