Estou customizando a configuração do Apache httpd (2.4.59). Aqui está um quebra-cabeça:
Esta regra reescreve os URIs correspondentes se for incondicional:
RewriteRule ^/abc/.* /myscript.php [L]
Mas se for codificada desta forma, a regra não será reescrita e não terá efeito nos mesmos URIs:
<If true>
Header always set Test "executed"
RewriteRule ^/abc/.* /myscript.php [L]
</If>
O cabeçalho de teste é enviado, mas para URIs correspondentes a ^/abc/.*, myscript.php nunca é executado.
O que está acontecendo?
Para sua informação, estou trabalhando <If>
com uma condição real, não <If true>
. Mas quando testei <If true>
, percebi que o RewriteRule nunca seria executado de qualquer maneira.
Aqui está uma "correção" para o RewriteRule - remova ^ do padrão:
Explicação
LogLevel alert rewrite:trace6
.<If>
bloco foi processado por último, após todos os outros RewriteRule, incluindo aqueles abaixo do<If>
bloco. O<If>
foi registrado como "[*perdir *If/]"(?)<If>
foi aplicado ao caminho absoluto do arquivo de destino para cada URL de entrada.<If>
poderia incluir o caminho absoluto.