如果原始 url 符合某些条件.htaccess,则阻止请求

Block request if original url matches some condition .htaccess

我有这样的 mod_rewrite 规则:

RewriteRule ^(/)?some_path/?$ /wp-login.php [QSA,L]

这允许 wordpress 中的登录尝试转到 some_path,apache 将其重写为 wp-login,因此 wordpress 可以处理它而无需知道此重写。

我现在想通过 mod_rewrite 一起阻止对 wp-login 的访问,但是如果我制定这样的规则:

RewriteCond %{REQUEST_URI} /wp-login.php
RewriteRule ^ - [F,L]

现在这个规则块已经完美了,除了它也阻止了对 /some_path 的调用,我认为这是因为 mod_rewrite 一直循环遍历所有规则,而一开始是 /wp-login.php 不匹配,当 some_path 被重写为 /wp-login.php 它仍然会阻止它。

是否有一些优雅的方法来处理这个问题?基本上,只有当原始 request_uri 是 wp-login 而不是重写的 request_uri.

时,我才想阻止发送到 /wp-login.php 的请求

Ps。 nginx 解决方案的奖励积分虽然这可能是一个不同的问题

而不是 REQUEST_URI 使用 THE_REQUEST 变量:

RewriteCond %{THE_REQUEST} /wp-login.php
RewriteRule ^ - [F,L]

THE_REQUEST 变量表示 Apache 从您的浏览器收到的原始请求,它在执行某些重写规则后不会被覆盖。此变量的示例值为 GET /index.php?id=123 HTTP/1.1