Я везде искал решение для этого, а также пробовал много разных вещей, но пока ни один из них не работал. Вот моя проблема. На сервере Apache мне нужно обрабатывать каждый html-запрос в определенном каталоге / виртуальном хосте / что угодно и читать пользовательский файл cookie аутентификации из другой службы. Мне нужно расшифровать, а затем прочитать этот файл cookie аутентификации, а затем: а.) Перенаправить пользователя в службу входа (совершенно другой URL-адрес, а не за Apache) или б.) Ввести заголовки с базовой информацией, такой как имя пользователя, в ответ и отправить пользователя на документ, который они запросили.
Я попытался создать сценарий CGI, в котором я бы переписал, добавив запрошенный URL-адрес в виде строки запроса в cgi, который выполнил бы логику, а затем перенаправил бы пользователя, где это необходимо. Но потом я узнал, что перенаправление сотрет все написанные мной заголовки. Затем я попытался использовать cgi-скрипт с mod_ext_filter, что было бы идеально, но, видимо, вы не можете писать с ним заголовки, только тело (хотя кто-нибудь, пожалуйста, скажите мне, что я ошибаюсь, потому что это было бы моим решением). Наконец, я попытался установить свой cgi-скрипт в качестве действия и добавить его в качестве обработчика для путей .html, но это продолжало выдавать мне ошибку «400 Bad Request» (и выполнение Action verify_request test.rb
заставляет apache запускать localhost / test.rb / {user} /index.html?). Моей последней неудачной попыткой было бы создать собственный модуль Apache на C, но мне бы очень хотелось этого избежать. (хотя, если честно, мне бы очень хотелось написать собственный REST API для обработки этой логики для наших сервисов)
Итак, как лучше всего реализовать это в Apache / должен ли я вообще помещать эту логику в Apache?
Похоже, вы хотите заново изобрести систему WebSSO, такую как Shibboleth SP, CAS или многие другие. В этом случае задействована важная логика, которой невозможно (или, по крайней мере, практически) управлять с помощью одной только конфигурации Apache.
Если вы действительно хотите действовать в одиночку, я бы действительно посоветовал вам развернуть собственный модуль Apache, хотя я считаю, что mod_perl даст вам необходимую гибкость, без необходимости писать какой-либо C - и у О'Рейли есть книга на mod_perl. Я, конечно, не буду винить вас, если вы думаете, что написание C предпочтительнее Perl; Я сам написал (очень) простой модуль C, чтобы управлять пониманием пользователя Apache, на основе индивидуального заголовка запроса, установленного доверенным прокси-сервером, и это не было слишком обременительно (на самом деле, без проблем).