首页 > 解决方案 > 用 mod_rewrite 匹配多个相同参数的实例

问题描述

我对重写规则有一些问题。我有一个网站接受作为参数的分页选项,作为任何位置的参数

index.php?page=2
index.php?other_parameter=other_value&page=2&another_paramenter=another_value

现在的问题是一些爬虫使用附加他们可以在页面上看到的所有参数,所以他们尝试

index.php?page=2&page=3&page=4
index.php?other_parameter=other_value&page=2&page=3&page=4&another_paramenter=another_value

我想阻止这些第二次尝试,所以基本上阻止查询参数中包含多个 page=NN 实例的任何调用,可能会将它们重定向到主页。

我正在使用https://technicalseo.com/tools/htaccess/来测试一些正则表达式来匹配这个,但我似乎无法找到一种方法来阻止具有多个 page= 参数的任何 url。

任何提示你会怎么做?

标签: regex.htaccess

解决方案


您可以使用此规则来阻止此类查询字符串:

RewriteCond %{QUERY_STRING} (?:^|&)(page=)\d+(?=&(?:.*&)?\1) [NC]
RewriteRule ^ - [F]

正则表达式演示

page=<number>如果后面跟着page=查询字符串中任何位置的另一个实例,则此条件中的正则表达式模式匹配。如果匹配成功,则拒绝该请求(403)。


推荐阅读