.htaccess,我可以阻止所有以“/index.php?action=”开头的请求吗?

.htaccess, can I block all requests starting with exactly "/index.php?action="

是否有 .htacces 方法来阻止所有以 /index.php?action= 开头的请求?

我想通了:

RewriteCond %{QUERY_STRING} \baction=\b [NC]
RewriteRule ^ - [F]

但是如何将 /index.php? 部分放在该模式的前面。我尝试了很多,但它没有用,只有这部分模式还在 URL

中的其他地方阻塞了 &action= 参数

希望能帮到你。提前谢谢了, 妮可

您可以使用 THE_REQUEST 变量来匹配完整的 URL 并像这样阻止它:

RewriteCond %{THE_REQUEST} /index\.php\?action= [NC]
RewriteRule ^ - [F]
RewriteCond %{QUERY_STRING} \baction=\b [NC]
RewriteRule ^ - [F]

But how do I put the part /index.php? in front of that pattern.

RewriteRule模式(即您示例中的^)与URL(减去斜杠前缀)。所以,你可以这样做:

RewriteCond %{QUERY_STRING} ^action= [NC]
RewriteRule ^index\.php$ - [NC,F]

这匹配任何以 /index.php?action= (case-insensitive) 开头的请求。

您最初使用的正则表达式(即 ^)对所有内容都是成功的,因此将匹配任何以 /<anything>?action=.

开头的 URL

此方法与检查 THE_REQUEST(如@anubhava 的回答)之间的区别在于,这也会阻止已在内部重写为 /index.php?action= 的请求,而 THE_REQUEST只会阻止来自客户端的直接请求。