将根目录中的所有 .txt 文件重定向到 404(robots.txt 除外)

将根目录中的所有 .txt 文件重定向到 404(robots.txt 除外)

我正在尝试配置我的 .htaccess 以重定向所有 txt 文件在根目录至 404 错误。(robots.txt 除外)

我尝试使用 RedirectMatch 404 [^robots]\.txt$ 但它也会重定向我子目录中的 txt 文件。

谢谢。

答案1

怎么样:

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 让所有 txt 文档都获取不存在的页面,例如:

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

问题中的示例失败的原因是因为正则表达式[^robots]\.txt$匹配以 r,o,b,t,s 以外的字符结尾的所有内容.txt。通过在此之前添加^/,您将匹配根目录中的所有单字母(robts 除外).txt 文件。

正则^表达式开头的 表示URI的开头,括号内的 表示“非”。括号表示“里面的字符之一”。

如果在正则表达式中添加一个*“-”号,则表示在“-”之前紧接着出现零次或多次“- *

因此,^/[^r/obts]*\.txt$将匹配根目录中任何包含任意数量(包括 0)字符(除 [r,/,o,b,t,s] 以外)的文本文档,这些字符以 结尾.txt/zzzfile.txt但不包括/mysecretfile.txt,因为其中包含rts。它也不匹配/xyz/xyz.txt,因为 位于/括号内。这更接近于您尝试执行的操作,但它并不排除/robots.txt,而这正是您想要的。

^/[^r/][^o/][^b/][^o/][^t/][^s/]\.txt$匹配除 robots 之外的任意 6 个字符(加上 .txt 扩展名)。

答案2

就 HTTP 客户端而言,删除这些文件将具有相同的效果,并且可能更容易。

相关内容