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

时间:2015-01-15 16:37:51

标签: apache .htaccess mod-rewrite nginx

我有一个像这样的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时阻止发送到/wp-login.php的请求,而不是重写的request_uri。

聚苯乙烯。 nginx解决方案的奖励积分虽然可能是一个不同的问题

1 个答案:

答案 0 :(得分:4)

而不是REQUEST_URI使用THE_REQUEST变量:

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

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