Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Кто-нибудь значет причину нечеловеческого отношения разработчиков Apache httpd к использованию локальных переменных
Судя по всему, у них нечеловеческое отношение к программированию вообще. Чем больше знакомлюсь с Apache httpd, тем сильнее укрепляюсь в мысли, что у его разработчиков серьезные проблемы, как бы это сказать помягче, с адекватностью в широком смысле.
С тех пор, как было написано первое сообщение в теме, таки дошли руки заняться вопросом более пристально — обнаружилось, что локальные переменные таки есть, но сделаны откровенно через задницу. То, что переменные созданные SetEnv, нельзя использовать во многих директивах без создания вложенного запроса, еще можно худо-бедно объяснить порядком вызова модулей и логикой их работы, а вместо SetEnv можно использовать SetEnvIf*. Но дальше, как обычно, начинается задница.
Например, "SetEnv Var" создает переменную с пустым значением. А SetEnvIf*, если написать "var=" — со значением "1". Почему? А вот так придумали.
Адекватного способа создать переменную с пустым значением (для некоторых применений это важно) я не нашел, но выкрутился через "var=$0" — если в тестовом выражении нет regexp, то использование $n не порождает ошибки. И на том спасибо.
Ладно, сумели определить переменную в .htaccess, а куда ее потом можно вставить? А почти никуда.
Можно в <If>, можно в Rewrite*, можно в SSI, и практически всё. Большинство часто используемых директив то ли не видит этих переменных, то ли синтаксис не допускает, а что конкретно — поди пойми.
Чтобы копать все это не вслепую, поставил для соответствующих модулей уровень trace8 для вывода в лог. С удивлением обнаружил, что все, что может сказать mod_setenvif об установке переменной — это "Setting <VarName>".
mod_alias и mod_include умеют выводить сообщения только об ошибках — успешный RedirectMatch и разнообразные функции SSI не порождают вообще ничего.
Прям реально интересно, как они отлаживали свое поделие при столь убогих логах? Пошагово, что ли?