2013-12-20 42 views
0

我有一些問題與Wordpress或一些插件偶爾更新/覆蓋我的.htaccess文件,這將返回404錯誤頁面時訪問職位。爲了解決這個問題,我需要再次保存永久鏈接。拒絕Wordpress和插件從更新.htaccess文件

我已經在我的網站上刪除網址彈頭 「類別」,所以它看起來是這樣的:

原始

www.mysite.com/category/post-title 

與黑客更新

www.mysite.com/post-title 

我有+20插件安裝,我不知道是什麼導致這個問題。

是否可以拒絕Wordpress和插件寫入.htaccess文件?

這是我的黑客從URL蛞蝓在functions.php的

/* Kill category base */ 
function kill_category_base ($string) { 
$string = str_replace('category/', '', $string); 
return $string; 
} 
add_filter('category_link', 'kill_category_base'); 

禁止類,這是我的.htaccess

# BEGIN WordPress 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

# add a trailing slash to /wp-admin 
RewriteRule ^wp-admin$ wp-admin/ [R=301,L] 

# redirect everything else to wordpress 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php [L] 

RewriteRule^- [L] 
RewriteRule ^(wp-(content|admin|includes).*) $1 [L] 
RewriteRule ^(.*\.php)$ $1 [L] 

# END WordPress 
+0

是wordpress刪除*所有*在你的htaccess文件? –

+0

您可以將.htaccess上的文件權限更改爲0444.但您確實需要修剪插件。他們不應該在沒有特別好理由的情況下修改.htaccess,如果你不確定哪一個是負責任的,那麼我認爲他們中沒有一個有充分的理由這樣做。 –

+0

此外,您的htaccess中的哪些規則正在被刪除,您不想刪除? –

回答

1

如果你有你的服務器的SSH訪問,你可以發出以下命令限制對文件的寫入訪問權限,以便除根用戶之外的任何人都不能編輯包括WordPress在內的文件:

chmod 444 .htaccess 

您將需要以root用戶身份運行此命令,或作爲文件的當前擁有用戶運行。

如果你沒有ssh訪問你的服務器,那麼你在這裏沒有什麼選擇。如果是這樣的話,您需要搜索所有插件的代碼,並找出寫入該文件的哪一個。然後,停用該插件,或更改代碼,以使其不再寫入該文件。

UPDATE

我注意到,有幾個人都有點胡言亂語在這裏給我的答案。我閱讀了所有這些內容,並重新審視了這個問題。事實證明,我必須首先誤解這個問題。

我原來的回答是基於安全立場。我認爲這個問題是關於如何防止文件被覆蓋,從安全的角度來看,因爲也許你的網站被黑客攻擊了。如果是這種情況,將權限設置爲444可以在100%的時間內正常工作,但是您需要對基本上所有文件執行此操作,除了少數幾個文件和上傳目錄之外。實際上,這樣做以及我的所有插件保持最新狀態,阻止了我們公司親自託管的任何站點被黑客入侵,而且我們承載了近300個站點,流量從1000 /月到5億/月不等。部署過程稍長一些,但安全警惕的好處嚴重影響了額外部署時間的後果。

但是,問題並沒有問,所以我的壞。事實上,在再次查看並真正理解這個問題之後,@ mr_mmmmore已經接近正確的迴應。你只需要將# BEGIN WordPress# END WordPress的修改移出,但還是有一點點。

如果你想(最)的插件也不會覆蓋您的更改(而不僅僅是核心WordPress的),你需要在類似的標記,以包裝代碼。否則,在更新htaccess時,您的代碼仍可能會被刪除。您最終的文件應該是這個樣子:

# BEGIN MyCodeTop 
RewriteEngine On 
RewriteBase/

# add a trailing slash to /wp-admin 
RewriteRule ^wp-admin$ wp-admin/ [R=301,L] 
# END MyCodeTop 

# BEGIN WordPress 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php [L] 
# END WordPress 

# BEGIN MyCodeBottom 
RewriteRule^- [L] 
RewriteRule ^(wp-(content|admin|includes).*) $1 [L] 
RewriteRule ^(.*\.php)$ $1 [L] 
# END MyCodeBottom 

一般來說,WordPress的本身將讓您更改htaccess文件,而不需要修改他們,即使他們是不是在自己的標記組;然而,這裏有一些插件會混雜管理htaccess文件的核心WordPress功能,並以這種方式濫用它們,結果只是刪除您的更改,因爲它們不存在於自己的標記組內。爲了安全起見,最好只遵循WordPress標準,製作自己的標記組,並將代碼放在那裏。

感謝@mr_mmmmore讓我重讀這裏的問題,因爲我第一次完全錯過了整個觀點。加一。

+0

從FTP客戶端(如Filezilla)更改文件權限是否不夠? – puntable

+0

在這種情況下(這個問題我認爲是這個人的原始問題)導致nav-menu.php文件被破壞的黑客入侵網站存在問題,文件的權限設置並不重要,被這個損壞的文件重置爲默認文件和444權限。檢查其他答案。 – davidtaubmann

1

拒絕寫入.htaccess的Worpress對於遇到的問題看起來過度。再加上一些插件依賴於能夠寫入.htaccess,所以我不建議在沒有調查可能的後果的情況下這樣做(例如緩存插件可能需要添加重寫規則)。

而且您不必這樣做:WP刪除自己編輯的原因是因爲您將它們放在#BEGIN Wordpress和#END Wordpress評論之間。您無法控制這些內容之間的內容:將其視爲在.htaccess文件中的保留位置,其中WP執行所需的任何操作。所有未被WP添加的東西都會在某個時候被刪除。

因此,所有你需要做的是移動開始/結束WP以外的編輯位評論,像這樣(你必須決定前後的WP規則,什麼是必須去):

# editings that must run before WP rewrite rules 
#------------------------- 
RewriteEngine On 
RewriteBase/

# add a trailing slash to /wp-admin 
RewriteRule ^wp-admin$ wp-admin/ [R=301,L] 

# BEGIN WordPress 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php [L] 
# END WordPress 

# editings that must run after WP rewrite rules 
#------------------------- 
RewriteRule^- [L] 
RewriteRule ^(wp-(content|admin|includes).*) $1 [L] 
RewriteRule ^(.*\.php)$ $1 [L] 

定義WP規則之前或之後必須遵循的內容取決於你想要做什麼。通常我會將WP規則保留在最後並放在我的面前。

-1

CHMOD不工作WordPress的重寫 無論線之間開始和ND的WordPress安裝 無插件和WordPress重寫 沒有這裏的答案是正確的

+0

我相信你的情況是我評論我的回答,其中nav-menu.php文件被破壞的被黑網站的問題。 PS:你的評論不應該是一個答案。 – davidtaubmann

0

我已經過了半年這種.htaccess reset掙扎直到現在在各種網站上發佈。

我暫時的解決方案是每次發生這種情況時重新安裝最新的文件系統備份(.zip)(在某些情況下,甚至避免網站正確顯示或至少顯示,但大多數情況下避免了管理員進入管理面板)。

真正的解決方案似乎非常簡單,但僅適用於您的網站遭到黑客入侵的情況(尚未能夠捕獲這些網站被入侵的方式或時間)。在這種情況下,wp-includes/nav-menu.php文件被破壞,並強制.htaccess重置爲默認值,並將其權限設置爲444.

因此,解決方案是使用正確的文件恢復該文件。

儘管如此,這並不是解決安全問題的方法,但是我懷疑許多不同的插件可能是這類黑客的漏洞或後門。所以你可以做什麼來解決安全問題是安裝Sucuri Security - Auditing, Malware Scanner and Security HardeningWordfence插件。

就個人而言,安裝插件以增強網站的安全性似乎與在PC中安裝防病毒軟件類似。我還會推薦一些像Cloudflare這樣的環境方法。