redireciona todos os arquivos .txt no diretório raiz para 404 (Exceto o robots.txt)

2

Estou tentando configurar o meu .htaccess para redirecionar todos os arquivos txt no diretório raiz para o erro 404. (Exceto o robots.txt)

Eu tentei usar %código% Mas ele também redireciona arquivos txt em meus subdiretórios.

Obrigado.

    
por Rotem 11.07.2013 / 09:49

2 respostas

1

Que tal:

ErrorDocument 404 /404.php
RewriteEngine On
RewriteRule ^/robots\.txt$ /robots.real [L]
RewriteRule ^/[^/]*\.txt$ /404.php [L]

em que 404.php é um documento que retorna 404 e robots.real é o nome do seu robots.txt .

Omita a primeira instrução ErrorDocument se você não quiser projetar sua própria página de mensagem de erro, mas geralmente é bom ter uma, porque você pode então tê-la em seu próprio estilo, assim como executar lógica em para captar erros ortográficos e assim por diante.

Venha para pensar sobre isso, você provavelmente não precisa criar uma página 404 em tudo. Se você usar o mod_rewrite para fazer com que todos os documentos txt busquem uma página inexistente, como:

RewriteRule ^/[^/]*\.txt$ a-page-that-does-not-exist.html [L]

A razão pela qual seu exemplo na pergunta falha é porque a expressão regular [^robots]\.txt$ corresponde a tudo que termina em um caractere diferente de r, o, b, t, s seguido por .txt . Ao adicionar ^/ antes disso, você corresponderá todos os arquivos .txt de uma letra (exceto robts) na raiz.

O ^ no início da expressão regular significa o início do URI e, dentro dos colchetes, significa "não". Suportes significam "um dos caracteres dentro".

Se você adicionar um * -sign ao regexp, isso significa zero ou mais ocorrências do que é imediatamente antes do * .

Assim, ^/[^r/obts]*\.txt$ corresponderá a qualquer documento de texto na raiz que tenha qualquer número (incluindo 0) de quaisquer caracteres, exceto [r, /, o, b, t, s] terminando em .txt , por exemplo /zzzfile.txt , mas não /mysecretfile.txt , porque contém r e t e s . Ele também não corresponde a /xyz/xyz.txt , devido ao / dentro dos colchetes. Isso está mais próximo do que você tentou fazer, mas não exclui apenas /robots.txt , que é o que você deseja.

^/[^r/][^o/][^b/][^o/][^t/][^s/]\.txt$ corresponde a 6 caracteres, exceto robôs (mais a extensão .txt).

    
por 11.07.2013 / 10:03
0

A remoção desses arquivos terá o mesmo efeito que os clientes HTTP e provavelmente será mais fácil.

    
por 11.07.2013 / 10:38

Tags