我有一个wordpress网站,我想暂时阻止访问,并将order deny,allow
添加到.htaccess文件中:
RewriteEngine off
order deny,allow
deny from all
allow from [my ip]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
但是,它没有用。
我尝试将其移至重写规则以下:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
RewriteEngine off
order deny,allow
deny from all
allow from [my ip]
开始工作了。
为什么它不适用于第一个例子?
答案 0 :(得分:0)
在Wordpress htaccess中,这个评论:
# BEGIN WordPress
# END WordPress
Wordpress使用它来动态添加其他规则。如果您查看wp-admin/includes/misc.php
,会有一个名为save_mod_rewrite_rules
的函数来处理您的htaccess的写入。在此函数中,规则来自mod_rewrite_rules
WP_Rewrite
方法wp-includes/rewrite.php
,这是$rules = apply_filters( 'mod_rewrite_rules', $rules );
中的一个类。如果你研究那种方法,你会看到最后一行:
allow, deny
这意味着过滤器应用于规则,因此无论插件/主题是什么,都可以覆盖此规则以添加自己的规则,因此添加访问策略。也许WP核心添加他自己的拒绝/允许规则。所以这可能是你的问题。
RewriteCond
规则的另一种解决方案是使用<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^[your IP]$
RewriteRule ^(.*)$ - [R=403,L]
</IfModule>
为除您之外的所有IP抛出403(将其置于htaccess的顶部):
GetCustomUI