最近,我們的一位讀者詢問是否有可能阻止WordPress覆蓋.htaccess文件中的自定義代碼。WordPress以及幾個(gè)插件將自定義設(shè)置添加到.htaccess配置文件中。如果您已將自己的自定義代碼添加到.htaccess,則可能會(huì)擔(dān)心它會(huì)被覆蓋或刪除。在本文中,我們將向您展示如何阻止WordPress覆蓋.htaccess文件。

為什么WordPress會(huì)覆蓋.htaccess文件?
您的.htaccess文件是一個(gè)功能強(qiáng)大的配置文件,用于存儲(chǔ)有關(guān)WordPress網(wǎng)站的重要設(shè)置。它包含告訴您的托管服務(wù)器如何處理您的網(wǎng)站的規(guī)則。
WordPress使用.htaccess文件來存儲(chǔ)其永久鏈接設(shè)置。每當(dāng)您更改或重新生成永久鏈接時(shí),WordPress都會(huì)自動(dòng)用新設(shè)置覆蓋.htaccess中的舊設(shè)置。
一些WordPress插件也將其設(shè)置保存在.htaccess中。例如,W3 總緩存插件將修改您的 .htaccess 文件,以便配置作為插件一部分的緩存和優(yōu)化工具。
最后,您可以對(duì) .htacess 進(jìn)行自己的自定義更改,以控制網(wǎng)站的工作方式。例如,您可以向文件添加自定義規(guī)則,以保護(hù)您的管理區(qū)域、保護(hù)您的站點(diǎn)免受黑客攻擊、設(shè)置重定向、禁止可疑 IP 地址等。
一些用戶擔(dān)心,如果他們將自己的自定義規(guī)則添加到.htaccess,那么當(dāng)WordPress使用新設(shè)置覆蓋文件時(shí),它們可能會(huì)被刪除。其他用戶更喜歡手動(dòng)配置.htaccess,根本不讓W(xué)ordPress寫入它。
如何阻止WordPress覆蓋您的.htaccess規(guī)則
好消息是,如果您了解 .htaccess 文件的工作原理,那么您可以確信您的自定義規(guī)則不會(huì)被覆蓋。
這是因?yàn)閃ordPress或您的插件將更改的文件區(qū)域已明確標(biāo)記。只需確保不要向這些區(qū)域添加代碼即可。
不要修改WordPress標(biāo)記中的代碼
正如我們之前所說,WordPress使用.htaccess來存儲(chǔ)SEO友好URL結(jié)構(gòu)的設(shè)置。只要您更改永久鏈接設(shè)置,它保存到文件中的代碼就會(huì)被自動(dòng)覆蓋和更新。
正如您在下面的屏幕截圖中看到的,WordPress將此信息保存在兩個(gè)標(biāo)記之間,并且.# BEGIN WordPress# END WordPress

請(qǐng)注意這些標(biāo)記中的警告:
“BEGIN WordPress”和“END WordPress”之間的指令(行)是動(dòng)態(tài)生成的,只能通過WordPress過濾器進(jìn)行修改。這些標(biāo)記之間對(duì)指令所做的任何更改都將被覆蓋。
這意味著WordPress不會(huì)覆蓋或修改您在這些標(biāo)記之外添加的任何代碼。用戶通常將其自定義代碼添加到文件頂部的標(biāo)記上方。# BEGIN WordPress
提示:.htaccess是一個(gè)隱藏文件,位于WordPress網(wǎng)站的根文件夾中。
不要修改插件標(biāo)記中的代碼
當(dāng)插件將其設(shè)置保存到 .htaccess 時(shí),它還會(huì)將其放置在看起來像 和 的標(biāo)記之間。# BEGIN Plugin# END Plugin
例如,如果您安裝并設(shè)置 W3 總緩存插件以提高您的網(wǎng)站速度和性能,那么它將在 和 標(biāo)記之間向 .htaccess 添加規(guī)則。# BEGIN W3TC Browser Cache# END W3TC Browser Cache

每當(dāng)您更改插件的設(shè)置時(shí),這些規(guī)則都會(huì)被覆蓋,因此您需要注意不要在這些標(biāo)記之間添加自己的自定義 .htaccess 規(guī)則。
為自定義代碼創(chuàng)建標(biāo)記
在極少數(shù)情況下,行為不佳的插件可能會(huì)修改其 and 標(biāo)記之外的代碼。但是,它通常不會(huì)修改在WordPress或其他插件使用的標(biāo)記之間找到的代碼。# BEGIN# END
如果您擔(dān)心行為不良的插件會(huì)覆蓋您的代碼,那么您可以將自己的標(biāo)記添加到 .htaccess 文件中。
例如,可以在 .htaccess 文件的頂部鍵入和標(biāo)記,然后在這些標(biāo)記之間添加自己的自定義規(guī)則。# BEGIN MyCustomCode# END MyCustomCode

如果您還需要在 .htaccess 的末尾添加代碼,則可以在那里添加一組不同的標(biāo)記。只要確保給他們不同的名字。例如,您可以使用“MyCustomCodeTop”和“MyCustomCodeBottom”。
如何阻止WordPress修改.htaccess。
現(xiàn)在您了解了.htaccess的工作原理,您可以確信您的自定義代碼不會(huì)被WordPress或插件覆蓋。
但是,一些開發(fā)人員和高級(jí)用戶希望阻止WordPress對(duì).htaccess進(jìn)行任何更改。
例如,您可能希望通過在 .htaccess 中手動(dòng)鍵入設(shè)置來創(chuàng)建永久鏈接。在這種情況下,您將希望通過阻止WordPress將其自己的永久鏈接設(shè)置保存到文件中來避免沖突。
除非您知道自己在做什么,否則我們不建議這樣做,因?yàn)樗赡軙?huì)導(dǎo)致意想不到的后果。但是,可以通過更改文件的權(quán)限或使用代碼來完成。
阻止WordPress使用文件權(quán)限更改.htaccess。
阻止WordPress修改.htaccess的一種方法是將文件設(shè)為只讀。為此,您需要使用FTP客戶端或WordPress托管提供商提供的文件管理器更改文件權(quán)限。
您可以在WordPress安裝的根目錄中找到.htaccess文件。接下來,您應(yīng)該右鍵單擊該文件并選擇“文件權(quán)限”。

這將顯示一個(gè)彈出窗口,您可以在其中更改文件的屬性。
默認(rèn)設(shè)置為 644,但您可以通過直接在“數(shù)值”字段中鍵入或確保僅選中“讀取”框來將其更改為 444。

單擊“確定”按鈕后,該文件將是只讀的,無法修改。
當(dāng)然,這也意味著您無法寫入文件。當(dāng)您希望進(jìn)行更改時(shí),您需要暫時(shí)將文件權(quán)限設(shè)置回 644。
阻止WordPress使用代碼更改.htaccess。
另一種解決方案是使用代碼片段,讓W(xué)ordPress知道不要寫入.htaccess文件。如果你想阻止WordPress修改.htaccess而不阻止你的插件,這很有用。
注意:編輯任何核心WordPress文件都可能很危險(xiǎn)。即使是一個(gè)小錯(cuò)誤也可能導(dǎo)致您的網(wǎng)站出現(xiàn)重大錯(cuò)誤。這就是為什么我們只向高級(jí)用戶推薦此方法的原因。
只需在 wp-config.php 文件的末尾添加以下代碼片段即可。
add_filter('got_rewrite', '__return_false');
完成此操作后,WordPress將不再寫入.htaccess文件。
WordPress無法更改.htaccess時(shí)顯示錯(cuò)誤消息
如果您在 .htaccess 設(shè)置為只讀時(shí)嘗試更改永久鏈接設(shè)置,則會(huì)顯示一條錯(cuò)誤消息。
在設(shè)置 ? 永久鏈接頁面的頂部,您將看到消息“您應(yīng)該立即更新您的 .htaccess 文件”。

這讓你知道WordPress無法修改.htaccess文件。
通常,這是您的意圖。但是,如果您確實(shí)希望將WordPress永久鏈接設(shè)置添加到.htaccess,則需要手動(dòng)執(zhí)行此操作。
在設(shè)置 ? 永久鏈接頁面的底部,您將看到另一條錯(cuò)誤消息,指出您的 .htaccess 文件不可寫。在此之下,您將看到需要添加到.htaccess的規(guī)則。

如果要添加這些設(shè)置,則需要暫時(shí)將 .htaccess 文件權(quán)限更改回 644,以便可以對(duì)其進(jìn)行編輯。之后,您應(yīng)該將規(guī)則粘貼到文件的WordPress BEGIN和END標(biāo)記之間,替換已經(jīng)存在的代碼。
完成后,只需將值設(shè)置回 444 并保存文件即可。它將再次不可寫。






