2015-09-07 40 views
1

我有一个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] 

,并开始工作。

为什么不在第一个例子中工作?

+1

这到底是什么工作?我尝试了两种方法,并且在阻止访问的情况下都能正常工作。但是,如果在将'RewriteEngine'设置为'on'后设置为'off',则不会发生重写。 – martinczerwi

+0

@martinczerwi在第一个例子中,每个人仍然可以访问该网站。在第二个示例中,除了我自己之外的所有人都被拒绝访问,但正如您所提到的,重写对我无效,所以我无法访问我网站上的大多数页面。 – Nate

+0

您可以删除'RewriteEngine off',作为快速修复程序 – martinczerwi

回答

0

在WordPress htaccess的,这样的评论:

# BEGIN WordPress 
# END WordPress 

是否使用由WordPress的动态添加额外的规则。如果您查看wp-admin/includes/misc.php,则会有一个名为save_mod_rewrite_rules的函数来处理您的htaccess的写入。在这个函数里面,规则是从的mod_rewrite_rules方法得到的,该方法位于wp-includes/rewrite.php。如果你看看这个方法,你会看到在结束该行:

$rules = apply_filters('mod_rewrite_rules', $rules); 

这意味着,一个过滤器上的规则适用,所以无论插件/主题可以覆盖此规则,以增加自己的,所以加访问策略。也许WP核心添加他自己的拒绝/允许规则。所以也许这是你的问题。

的替代解决方案allow, deny规则是使用RewriteCond抛出的所有IP以外的403比你(把这个在你的htaccess的顶部):

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REMOTE_ADDR} !^[your IP]$ 
    RewriteRule ^(.*)$ - [R=403,L] 
</IfModule>