Uma cópia na pasta web é uma fuga de código
Antes de mexer num ficheiro grande, o gesto natural é copiá-lo primeiro. cp index.php index.php.antes-da-alteracao, e depois trabalhar. Se esse ficheiro estiver na pasta que o servidor web publica, acabaste de deixar todo o teu código-fonte descarregável como texto simples — credenciais da base de dados, segredos, tudo o que o ficheiro contiver.
O Apache passa o index.php pelo PHP porque acaba em .php. O index.php.antes-da-alteracao não acaba em .php. Acaba em .antes-da-alteracao, de que o Apache nunca ouviu falar, por isso faz o que faz por omissão e envia os bytes.
A regra que quase toda a gente escreve, e porque não chega
A proteção habitual é uma lista de extensões proibidas: .bak, .orig, .save, .sql, .old. Apanha o ficheiro em que pensaste. Testada aqui, essa lista deu a resposta certa para probe.bak e a errada para cada um destes:
index.php.vor-xyz— foi assim que aconteceu mesmoindex.php.2026-08-19index.php.kopiestyle.css.altindex.php.1
Todos servidos com 200. O padrão de nome em que não pensaste é justamente o que vais usar, porque as cópias se chamam pelo que estavas a fazer na altura.
Inverter o corte
A regra que funciona não pergunta que extensões são proibidas. Faz uma pergunta de estrutura: este nome de ficheiro contém uma extensão de código que não está no fim?
Se contém, é cópia de algo que devia ser executado, diga o sufixo seguinte o que disser. index.php.qualquer-coisa encaixa. style.css.qualquer-coisa encaixa. O padrão cobre os nomes que ainda ninguém inventou, e é essa toda a ideia.
Verificado hoje contra o servidor em funcionamento: os cinco nomes acima devolvem agora 403, incluindo os que não existem — a regra nega a forma, não o ficheiro.
A exceção, e o que ensina
Um nome de ficheiro legítimo tem aqui exatamente essa forma: os recursos pré-comprimidos escrevem-se como style.css.1787777226.gz, com uma extensão a meio de propósito. A regra leva por isso uma única exceção estreita para um segmento de dígitos seguido de .gz, e esse ficheiro devolve 200 como deve.
É numa exceção assim que estas regras costumam ceder, por isso vale a pena dizer o que torna esta segura: é estreita ao ponto de não se poder construir index.php.algo.gz e recuperar o código, porque o segmento do meio tem de ser só dígitos. Uma exceção mais larga — «tudo o que acabe em .gz» — teria devolvido a regra inteira.
E o conselho mais simples continua a ser o que torna tudo isto desnecessário: guarda as cópias fora da pasta publicada. A regra é uma rede para o dia em que te esqueceres, não uma licença para deixares de te importar com onde a cópia vai parar.