Я пытаюсь использовать SetEnvIf (Apache2, через файл .htaccess) для хранения переменной среды, в которой значение, присваиваемое переменной, должно содержать пробелы. Например, при попытке установить для переменной среды «AUTH_KEY» значение «a b»:
SetEnvIf Request_URI "^/example" AUTH_KEY="a\ b"
Независимо от того, что я делаю, мне не удалось избежать пробела в значении - пробел действует как разделитель между создаваемыми env vars (в приведенном выше AUTH_KEY создается со значением '"a \' и вторым env var создается под названием 'b' '). Я тоже пробовал одинарные кавычки, но безуспешно.
Как избежать символа пробела?
В итоге разобрался для себя…
SetEnvIf Request_URI "^/example" "AUTH_KEY=a b"
… Что выглядит странно, но работает. Он правильно устанавливает AUTH_KEY в значение a b
Надеюсь, в будущем это поможет сэкономить чье-то время.
Детали:- Я не программист на C, но, неуклюже заглянув в Google, я обнаружил, что mod_setenvif.c указан на http://www.bvbcode.com/code/s6148jvr-385031
Функция вызывается в строке 405 (ap_getword_conf
, подробности о котором я нашел на http://docstore.mik.ua/orelly/apache_mod/155.htm), который, кажется, анализирует строки, разделенные пробелами (но необязательно заключенные в кавычки и допускающие использование escape-символов).
Я заметил, что это произошло до того, как подстрока, возвращаемая функцией выше, была разделена символом '=' (строка 411, функцией ap_getword). Таким образом, цитаты вокруг key=value
пара, а не просто значение.
Попробуйте использовать вместо этого SetEnvIf Request_URI "^/example" AUTH_KEY="a\sb"
. \ s здесь представляет собой пространство.