根据这篇文章,您可以这样做:
假设您要阻止 IP 地址 123.255.123.255 访问页面 www.mydomain.com/index.php?option=com_my_special_component。以下是如何编写规则:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^123\.255\.123\.255
RewriteCond %{QUERY_STRING} option=com_my_special_component [NC]
RewriteRule ^(.*)$ index.php [F,L]
第一行只是打开 URL 重写。第二行匹配 IP 地址(在每个点之前使用反斜杠),第三行匹配查询字符串(即 URL 中 ? 之后的任何内容) - 在这种情况下,如果 option=com_my_special_component 出现在 URL 中的任何位置,它将匹配之后 ?(例如 index.php?id=1&option=com_my_special_component&action=dostuff 仍然符合此规则)。该行末尾的 [NC] 告诉它应用规则,无论 URL 中的任何字符是大写还是小写。最后一行将用户重定向到带有“禁止”标头的 index.php - 因此他们将在浏览器中收到错误消息,并告诉 mod_rewrite 停止解释任何进一步的重写规则。
如果要禁止多个 IP 地址,可以为它们添加新行,但需要在除最后一行之外的每一行末尾添加 [OR] 标志 - 例如:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^123\.255\.123\.255 [OR]
RewriteCond %{REMOTE_ADDR} ^124\.255\.124\.255 [OR]
RewriteCond %{REMOTE_ADDR} ^125\.255\.125\.255
RewriteCond %{QUERY_STRING} option=com_my_special_component [NC]
RewriteRule ^(.*)$ index.php [F,L]
由于您阻止访问管理页面,因此您可能只想允许您的 IP。在这种情况下,您只需在 IP 地址前放一个感叹号,说明它是否是除此之外的任何 IP,然后重写。
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^123\.255\.123\.255
RewriteCond %{REMOTE_ADDR} !^124\.255\.124\.255
RewriteCond %{REMOTE_ADDR} !^125\.255\.125\.255
RewriteCond %{QUERY_STRING} option=com_my_special_component [NC]
RewriteRule ^(.*)$ index.php [F,L]
希望有帮助。