在apache中使用.htaccess阻止特定string开始的某些请求

54.215.234.39 - - [02/Apr/2014:10:51:35 -0400] "GET /ProductSearch.aspx?qs=94307 HTTP/1.1" 404 11414 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0" 

我得到了很多这些请求从各种IP地址发送到我的Apache服务器。 我们曾经使用一个基于aspx的网站。 现在它是PHP。 这些请求是洪泛的服务器。 我怎样才能阻止其中包含string“ProductSearch.aspx”的所有请求?

如果请求/ProductSearch.aspx您可以发送一个403 Forbidden (拒绝访问):

 RewriteEngine On RewriteCond %{REQUEST_URI} ^/ProductSearch.aspx RewriteRule ^(.*)$ - [F,L] 

但是,请注意,这些请求仍然会到达您的服务器,并会出现在您的access.log (但403而不是404 )。

为了避免这种情况,您必须在Web服务器之前进行过滤。 这可以通过一个反向代理来完成,但这是一个完整的另一点。


另外,正如@Michael Hampton在评论中提到的那样,您可以将请求*.aspx文件的所有请求redirect到*.php页面。

(假设,例如yourpage.aspx已被yourpage.aspx所取代):

 RewriteEngine On RewriteRule ^(.*).aspx$ $1.php [R=301] 

这将redirect

  • http://mydomain.com/ProductSearch.aspx?qs=94307

  • http://mydomain.com/ProductSearch.php?qs=94307