2015-09-07 20 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>