Re: Локальные переменные в .htaccess
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 19.11.23 15:11
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Кто-нибудь значет причину нечеловеческого отношения разработчиков 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 не порождают вообще ничего.

Прям реально интересно, как они отлаживали свое поделие при столь убогих логах? Пошагово, что ли?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.