旁白:Michi的代码不太正确,可能不像你想象的那么安全。。。
##### Michi’s code is BELOW #####
RewriteCond %{REQUEST_URI} wp-admin/
RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule .*\\.php [F,L]
RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule ^ADMINFOLDER/(.*) wp-admin/$1?%{QUERY_STRING}&YOURSECRETWORDHERE [L]
##### Michi’s code is ABOVE #####
第一个
RewriteRule
缺少替换参数。这将导致请求被(错误地)重写为
/[F,L]
, 这将导致404。好的,所以访问基本上是被阻止的,但目的是提供403禁止的服务(这是
F
标志用于)。因此,以下内容:
RewriteRule .*\\.php [F,L]
应重写为:
RewriteRule \\.php$ - [F]
请注意连字符的使用(
-
) 对于第二个参数。这看起来像是原始代码中的意外遗漏。此外,无需
L
当
F
使用标志。
<小时>
RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule ^ADMINFOLDER/(.*) wp-admin/$1?%{QUERY_STRING}&YOURSECRETWORDHERE [L]
如果您知道
ADMINFOLDER
. 这个
YOURSECRETWORDHERE
基本上是绕过的(最终用户不需要)!?所以
ADMINFOLDER
真正的“秘密”应该是漫长而神秘的。(TBH,这里不需要2个“秘密”,1个就可以了。)
任何像这样的阻塞指令都应该放在WordPress前端控制器之前。(虽然如果您仅阻止物理文件,但为了发挥功能,这并不重要,因为WP front controller只路由不映射到物理文件/目录的URL路径。)