Назад | Перейти на главную страницу

перенаправить все файлы .txt в корневой каталог на 404 (кроме robots.txt)

Я пытаюсь настроить свой .htaccess для перенаправления всех файлов txt в корневом каталоге до 404 Ошибка. (Кроме robots.txt)

Я пробовал использовать RedirectMatch 404 [^robots]\.txt$ Но он также перенаправляет текстовые файлы в мои подкаталоги.

Спасибо.

Как насчет:

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

где 404.php документ, возвращающий 404 и robots.real это имя твоего robots.txt.

Опустить первое ErrorDocument , если вы не хотите создавать свою собственную страницу сообщения об ошибке, но обычно неплохо иметь ее, потому что вы можете иметь ее в своем собственном стиле, а также выполнять в ней логику для обнаружения орфографических ошибок и т. д.

Если подумать, вам, вероятно, вообще не нужно создавать страницу 404. Если вы используете mod_rewrite, чтобы вместо этого все текстовые документы загружали несуществующую страницу, например:

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

Причина, по которой ваш пример в вопросе не работает, заключается в том, что регулярное выражение [^robots]\.txt$ соответствует всему, что заканчивается символом кроме r, o, b, t, s, за которым следует .txt. Добавляя ^/ перед этим вы сопоставите все однобуквенные (кроме robts) .txt файлы в корне.

В ^ в начале регулярного выражения означает начало URI, а внутри скобок означает «нет». Скобки означают «один из символов внутри».

Если вы добавите *-sign к регулярному выражению, это означает ноль или более вхождений того, что непосредственно перед *.

Таким образом, ^/[^r/obts]*\.txt$ будет соответствовать любым текстовым документам в корне, которые содержат любое количество (включая 0) любых символов, кроме [r, /, o, b, t, s], заканчивающихся на .txt, например /zzzfile.txt но нет /mysecretfile.txt, потому что он содержит оба r и t и s. Это тоже не совпадает /xyz/xyz.txt, из-за / внутри скобок. Это ближе к тому, что вы пытались сделать, но не исключает просто /robots.txt, чего вы и хотите.

^/[^r/][^o/][^b/][^o/][^t/][^s/]\.txt$ соответствует любым 6 символам, кроме роботов (плюс расширение .txt).

Удаление этого файла будет иметь тот же эффект для HTTP-клиентов и, вероятно, будет проще.