O que você está tentando alcançar é possível com ambos, e sua configuração atualmente em funcionamento é a maneira tradicional de fazer isso. É por isso que há muitos exemplos para fazer isso com RewriteCond
. As Expressões e as diretivas If
, ElseIf
, Else
e eram introduzido no Apache 2.4 como uma característica esperada, e um dos primeiros exemplos é tornar a reescrita mais legível e previsível:
Some of the things you might use this directive for, you've been using mod_rewrite for up until now, so one of the side-effects of this directive is that we can reduce our reliance on mod_rewrite's complex syntax for common situations. Over the coming months, more examples will be added to the documentation, and we'll have a recipe section with many of the same sorts of scenarios that are in the mod_rewrite recipe section.
In fact, most of the commonest uses of mod_rewrite can now be replaced with the
If
directive, making them easier to read, and, therefore, less prone to error, and the redirect looping that so often plaguesRewriteRule
-based solutions.
Sem testes, eu diria que usar expressões regulares com seu caso de uso torna isso muito complicado. Como você está comparando Host:
cabeçalhos provavelmente em um domínio fixo, digamos example.com
, você poderia usar o operador de comparação ==
(igualdade de cadeia) simples em vez de =~
(string corresponde à expressão regular ):
<ifModule mod_rewrite.c>
RewriteEngine on
<If "%{HTTP_HOST} == 'helpdesk.example.com'">
RewriteRule ^/?$ /index.php?pages=helpdesk&file=index [NC,L,QSA]
</If>
<If "%{HTTP_HOST} == 'account.example.com'">
RewriteRule ^/?$ /index.php?pages=account&file=index [NC,L,QSA]
</If>
</ifModule>