.htaccess rewriterule if / else

2

Eu tenho o seguinte código .htaccess:

RewriteEngine on

<if "%{HTTP_HOST} =~ /^helpdesk\./">
    RewriteRule ^/?$ /index.php?pages=helpdesk&file=index [NC,L,QSA]
</if>

<if "%{HTTP_HOST} =~ /^account\./">
    RewriteRule ^/?$ /index.php?pages=account&file=index [NC,L,QSA]
</if>

Obviamente, isso não está funcionando.

O que eu quero alcançar:

quando eu vou para link , o arquivo index.php deve obter os parâmetros pages = helpdesk e file = index. Quando eu vou para link , o arquivo index.php deve obter os parâmetros pages = account e file = index.

Quando eu substituo o RewriteRule por um redirecionamento, ele funciona, mas isso é possível?

Obrigado antecipadamente!

Editar:

perguntou minha pergunta rápido. Isso funciona.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^helpdesk\..* [NC]
RewriteRule ^/?$ /index.php?pages=helpdesk&file=index [NC,L,QSA]
RewriteCond %{HTTP_HOST} ^account\..* [NC]
RewriteRule ^/?$ /index.php?pages=account&file=index [NC,L,QSA]

Mas esta é a maneira correta ou existe uma alternativa (melhor)?

    
por yesterday 14.07.2018 / 12:55

1 resposta

0

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 plagues RewriteRule-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>
    
por 14.07.2018 / 14:48