Como escrever um RewriteRule para corresponder a um arquivo não existente?

3

Como posso escrever um RewriteRule que primeiro verifica se o arquivo solicitado existe e, se não, redireciona para a página raiz:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/(.*)" "/" [L]

Por exemplo %código% deve redirecionar para http://example.com/not_existing_file .

Isso não funciona no entanto. O que há de errado aqui?

    
por Manuel 22.12.2016 / 02:34

1 resposta

2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/(.*)" "/" [L]

Sua condição , verificando se a solicitação não mapeia para um arquivo existente, parece estar correta. No entanto, o RewriteRule não redireciona , ele reescreve internamente a solicitação. Também parece acionar um loop de reescrita (erro 500)?

Tente o seguinte:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/. / [R=302,L]

O sinalizador R é necessário aqui para acionar um redirecionamento externo . Isso só redirecionaria /<something> , em vez de /<anything> , como em seu código original.

Altere o redirecionamento 302 (temporário) para 301 (permanente) quando tiver certeza de que isso está funcionando bem - se isso for necessário. Faz testes mais fáceis, já que os 301s são armazenados em cache hard pelo navegador.

Isso também pressupõe que isso esteja na configuração principal do servidor, não em .htaccess ou <Directory> section.

    
por 22.12.2016 / 04:12