Faça o apache escolher uma versão do php baseada na extensão do url, mas com um único arquivo no sistema de arquivos

1

Eu quero configurar um servidor apache local para servir arquivos php com diferentes versões php. No meu documento root eu tenho phpinfo.php , agora se eu for para http://localhost/phpinfo.php4 , eu quero ver o arquivo phpinfo.php processado com php4, se eu for para http://localhost/phpinfo.php5 eu quero ver o mesmo arquivo processado com php5.

Nota: ambos os php 4 e 5 já estão instalados lado a lado, não tenho nenhum problema configurando o apache para tratar arquivos que possuem .php4 ou .php5 extensão no sistema de arquivos com o correto versão php. O que eu quero é que o apache faça o seguinte:

  • Se o caminho da url terminar em .php5 , exiba o arquivo que possui uma extensão .php no sistema de arquivos usando o manipulador application/x-httpd-php5 .
  • Se o caminho da url terminar em .php4 , exiba o mesmo arquivo com a extensão .php no sistema de arquivos usando o manipulador application/x-httpd-php4 .
por JanKanis 25.06.2012 / 16:35

1 resposta

1

Após um pouco de teste & erro eu descobri. Os encantamentos mágicos são

RewriteEngine on
RewriteRule ^(.*)\.php5$ $1.php [H=application/x-httpd-php,PT]
RewriteRule ^(.*)\.php4$ $1.php  [H=php4,PT]

onde application/x-httpd-php é o manipulador padrão que mod_php5 registra, e php4 é um manipulador cgi customizado que chama php4. A parte que eu tive mais dificuldade em descobrir é a flag PT (passthrough), que é necessária para que os manipuladores cgi funcionem. O PT faz com que outros módulos que fazem a regravação de url também façam seu trabalho, e o mod_cgi é um desses módulos.

    
por 25.06.2012 / 17:50