Você pode usar <If>
dentro de um <Macro>
, mas não para personalizar um <Macro>
com <If>
.
Como mencionado no meu comentário, o <Macro>
é avaliado apenas na inicialização e <If>
são avaliados para cada solicitação recebida.
Para resolver seu problema, coloque sua variável $authenticationMode
em aspas simples, porque é uma string (como você fez na parte direita):
<If "'$authenticationMode' == 'htpasswd'">
Mas o que essa macro fará é a seguinte:
No arranque, tem algures na sua configuração a instrução Use mymacro $param
O mod_macro doc diz:
At server startup time, each of these Use invocations would be expanded into a full virtualhost (*), as described by the Macro definition.
(* = O exemplo no documento é sobre virtualhosts)
Então, se você tiver Use mymacro htpasswd
, ele será expandido para a seguinte configuração:
<If "'htpasswd' == 'htpasswd'"> # Guilty line!
AuthUserFile $ROOT_PATH/path/to/.htpasswd
</If>
<ElseIf "'htpasswd' == 'server'">
AuthBasicProvider external
AuthExternal pwauth
</ElseIf>
<Else>
DO_CRASH
</Else>
Isso testará para cada solicitação algumas condições não muito úteis. E o seu servidor nunca será iniciado por causa da instrução DO_CRASH.
Como alternativa, eu pensaria em escrever 2 macros: uma correspondendo ao authenticationMode == "htpasswd" e outra ao authenticationMode == "server".
Por favor, teste e leve em conta que eu ainda estou aprendendo o Apache 2.4, então pode não ser uma resposta completa ... Espero que isso ajude!
Uma boa leitura do documento de expressão do Apache também pode ser útil.