将根目录下的所有.txt文件redirect到404(除了robots.txt)

我试图configuration我的.htaccessredirect到根目录的所有txt文件到404错误。 (除robots.txt外)

我尝试使用RedirectMatch 404 [^robots]\.txt$但它也redirect我的子目录上的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的名称。

如果您不想devise自己的错误消息页面,则省略第一个ErrorDocument语句,但通常有一个错误消息页面是很好的,因为您可以使用自己的样式,并在其中执行逻辑以捕获拼写错误和等等。

想想看,你可能根本不需要创build一个404页面。 如果你使用mod_rewrite来让所有的txt文件取而代之的是一个不存在的页面,比如:

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

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

正则expression式开头的^表示URI的开始,括号内表示“不”。 括号的意思是“里面的人物之一”。

如果给正则expression式添加* -sign,则意味着在*之前立即出现零次或多次。

因此, ^/[^r/obts]*\.txt$将匹配根目录中任何以[r,/,o,b,t,s]结尾的任意字符(包括0) .txt ,例如/zzzfile.txt而不是/mysecretfile.txt ,因为它包含rts 。 它也不符合/xyz/xyz.txt ,因为在括号内。 这与你试图做的更接近,但是它并不排除/robots.txt ,这就是你想要的。

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

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