使用.htaccess将查询字符串限制为特定范围

时间:2019-05-29 19:30:52

标签: apache .htaccess

我正在一个网站上,该网站允许您基于下拉列表一次显示类别中的一定数量的产品。目前,下拉列表允许的最高数量为显示100个产品。 URL始终在末尾附加一个查询,例如“ ?limit = 100 ”或“ ?limit = 50 ”,具体取决于您选择的数量。

我们注意到,以“ ?limit = 500 ”或“ ?limit = 10000 ”结尾的URL带来了大量流量。看来您可以手动在URL查询中输入任何数字,它会返回尽可能多的数字,或者至少返回该类别中的数字。有些类别有2000多种产品,这当然是非常消耗资源的。

我们一天中大部分时间都在研究如何缓解这种情况,而最好的猜测就是使用.htaccess

我们当前有以下代码:

RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+[^?]*\?limit=[1,0]
RewriteRule ^ - [F,L]

我们只允许显示最多100个结果,不能再显示更多。如果某人/漫游器手动在URL中输入一个较大的值(例如101或10000),则应该自动返回100,或者只是从最后删除?limit = 查询,因此默认的25个产品将自动显示出来。

在我们的.htaccess文件中使用上述代码,尽管它显示以下错误,但确实确实阻止了请求:

Forbidden
You don't have permission to access (CATEGORY/SUBCATEGORY) on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

奇怪的是,仅当您在“ limit = 99 ”以上查询时,它才会显示此错误-换句话说,limit = 1到limit = 99有效;并显示正确数量的产品。 100及以上引发403错误-我似乎无法弄清楚如何仅影响大于100的查询并如上所述实现RewriteRule工作。我是.htaccess的新手,如果对此特殊问题在其他地方得到解答,我深表歉意。任何帮助将不胜感激。

0 个答案:

没有答案