Note: I assume that by "redirect" you mean a rewrite rule which doesn't actually use the [R] flag, but instead "redirects" a request to a different PHP file - e.g. with no flags at all or an [L] flag.
If this assumption is wrong, then please have a look at my "Note on performance" argument, which still holds.
A regra de .htaccess será definitivamente mais rápida!
Veja por que:
- usando a regra .htaccess : quando um pedido chegar ao Apache, ele verificará o .htaccess para ver se algo precisa ser feito com essa solicitação; percebendo uma regra de reescrita, ela redirecionará a solicitação para o PHP, e o visitante do site obterá imediatamente o resultado final
-
usando o PHP
header
: a requisição vem, é processada pelo Apache, então dada ao PHP, então o PHP envia ao navegador do visitante um cabeçalho de redirecionamento de página, o navegador envia outra requisição, o Apache processa, para PHP, e só depois de tudo que o visitante finalmente conseguir o que ele queria!
Observação sobre o desempenho : em qualquer cenário (mesmo em uma LAN gigabit), a opção 1 acima será mais rápida. Expressões regulares podem ser lentas, mas o Apache já é um programa em C na memória, e o PHP é uma linguagem interpretada, que precisa ler e carregar o arquivo de script antes de processá-lo. Assim, eu realmente esperaria um melhor desempenho da regra de reescrita do Apache. O principal fator, no entanto, é uma solicitação de resposta HTTP extra para o método 2.
Se você insistir em fazer isso com o PHP, considere isto:
- armazena em cache toda a saída gerada em seu aplicativo PHP
- se você detectar uma condição de redirecionamento - destrua a saída em cache e, em seguida,
- inclua o arquivo PHP necessário para gerar uma nova saída - ou chame uma função que produzirá a saída desejada caso você precise de algo diferente
Essa abordagem também será mais rápida do que a header
-based.