2015-01-15 56 views
1

我有一个的mod_rewrite规则是这样的:块请求某些条件的.htaccess

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

这使得在WordPress的goto语句SOME_PATH登录尝试这阿帕奇重写为WP-登录,这样的WordPress可以处理它不必知道这个重写。

我想WP-登录块存取都在一起,现在通过mod_rewrite的,但如果我作出这样一个规则:

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

既然规则块的它完美,但它会阻止来电/ SOME_PATH我认为这是因为mod_rewrite保持循环,尽管所有的规则和/ wp-login.php不匹配,当some_path被重写为/wp-login.php时,它阻止了所有的规则。

有没有一些优雅的方式来处理这个问题?基本上我只想阻止请求去/wp-login.php只有当原始request_uri是wp登录,而不是重写request_uri。

诗篇。为nginx的解决方案加分,虽然这可能是一个不同的问题

回答

2

代替REQUEST_URI使用THE_REQUEST变量:

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

THE_REQUEST变量代表从浏览器和Apache接收到原始请求之后不被覆盖执行一些重写规则。这个变量的值是GET /index.php?id=123 HTTP/1.1

+1

完美的,正是我所需要的,不知道我怎么没有找到这与谷歌... :) – Xeli 2015-01-15 16:50:41

+0

不客气,很高兴它帮助。 – anubhava 2015-01-15 16:52:29