如果你有需要將 PHP 變成 HTML 來跑,通常代表你在實務上有以下需求之一,例如希望網址看起來更像靜態頁面、降低被掃描程式碼的風險,或配合既有系統與行銷需求使用。
需要先釐清的是,這裡所說的「PHP 變成 HTML」,並不是將程式語言轉換,而是透過伺服器設定,讓副檔名為 .html 的檔案仍交由 PHP 解析執行。
設定前必須先了解的觀念
在 cPanel 主機環境中,是否能讓 HTML 副檔名執行 PHP,關鍵不只在於 .htaccess 的設定方式,還與主機實際使用的 PHP Handler 有關。
.htaccess 的角色,只是告訴 Apache「哪些副檔名要交由 PHP 處理」,真正負責執行 PHP 程式的,是主機環境中所設定的 PHP Handler。
因此整體執行流程可以理解為:
.html → PHP Handler → PHP 執行 → 輸出 HTML
若 PHP Handler 不存在、未啟用,或設定方式與主機環境不符,常會導致網站出現 500 Internal Server Error 或畫面空白的情況。
為什麼不同 PHP Handler,.htaccess 寫法會不同?
不同 PHP Handler 在 Apache 中所使用的模組名稱不同,因此在 .htaccess 中指定副檔名交由 PHP 處理時,指令寫法也會有所差異。
目前多數虛擬主機皆採用 CloudLinux 環境,PHP Handler 通常已由系統統一設定完成,使用者無需自行切換執行方式,只需在 .htaccess 中將 HTML 副檔名正確指定給系統既有的 PHP Handler 即可。
若主機並未使用 CloudLinux,而是採用 cPanel 的 EasyApache 4 架構,則 PHP Handler 的設定方式與命名規則會有所不同,此時不建議直接套用 CloudLinux 的設定寫法。
對於未使用 CloudLinux 的使用者,建議可參考 cPanel 官方文件中對 PHP Handler 的介紹與說明,以確認目前主機所使用的執行架構,再進行對應設定:
cPanel 官方說明文件說明了不同 PHP Handler 在 EasyApache 4 架構下的角色與差異,適合用來了解為何不同環境下 .htaccess 的設定方式會有所不同。
方法一:透過 .htaccess 設定(較舊環境,PHP 5.6)
如果你有需要將 PHP 變成 HTML 來跑,且目前主機仍使用較早期的 PHP 5.6 環境,可以在 .htaccess 中加入以下設定:
AddHandler fcgid-script .html FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .html
此方式多見於早期的 cPanel 主機環境,主要用於仍停留在 PHP 5.6 的舊系統或特殊相容需求。由於此類設定不支援 PHP 7 以上版本,僅建議作為舊客戶系統的相容參考,不建議新建網站使用。
方法二:CloudLinux 主機(目前主流的虛擬主機環境)
若你的 cPanel 控制台上有安裝 CloudLinux,且 PHP 由系統統一管理(常見為 lsphp),可使用以下設定:
AddType application/x-httpd-lsphp .php .php5 .phtml .html .htm
這是目前 CloudLinux 虛擬主機中最常見且穩定的設定方式,無論使用 PHP 5.6 或 PHP 7.x、8.x(包含 PHP 8.4),皆可透過系統既有的 PHP Handler 正常執行。
此方式不需因 PHP 版本升級而修改 .htaccess,非常適合需要同時支援新舊系統的虛擬主機環境。
方法三:cPanel EasyApache 4(未使用 CloudLinux)
若主機未安裝 CloudLinux,而是使用 cPanel EasyApache 4 架構,則需依實際安裝的 PHP 版本,在 .htaccess 中指定對應的 PHP Handler。
以下為範例說明(請依實際 PHP 版本調整):
AddHandler application/x-httpd-ea-php84 .php .phtml .html
在 EasyApache 4 環境中,PHP Handler 名稱會隨 PHP 版本變動(如 ea-php56、ea-php82、ea-php84),當主機切換 PHP 版本時,必須同步修改 .htaccess 中的設定,否則容易導致網站出現 500 Internal Server Error。
WordPress 也能達到類似「HTML 輸出」的效果嗎?
WordPress 本身仍然是以 PHP 作為核心程式語言,並不會真正將 PHP 程式轉換成 HTML。不過透過快取、靜態化或網址重寫等方式,可以讓網站將 PHP 執行後的結果以 HTML 形式提供給訪客。
這類作法與本文介紹的伺服器層級設定不同,但在效能與實務應用上,都是常見且可行的解決方案。
WordPress 也能達到類似「HTML 輸出」的效果嗎?
WordPress 本身仍然是以 PHP 作為核心程式語言,並不會真正將 PHP 轉換成 HTML 程式碼。不過透過快取、靜態化或網址重寫等方式,可以讓網站輸出結果以 HTML 形式提供給訪客。
例如透過快取外掛產生靜態 HTML 檔案,或透過網址結構設定,讓使用者在瀏覽時感覺像是在存取靜態頁面,這些方式在效能與 SEO 上都有實務上的幫助。
這類做法與本文介紹的「伺服器層級設定 HTML 副檔名執行 PHP」在原理上不同,但在實務應用上,皆是常見且可行的解決方案。
總結說明
是否能讓 HTML 副檔名執行 PHP,取決於主機實際使用的 PHP Handler 與整體環境設定。對於 CloudLinux 虛擬主機使用者而言,只需依照系統既有架構進行設定即可;若未使用 CloudLinux,則建議參考 cPanel 官方文件確認 PHP Handler 架構後再進行設定。
在理解環境差異的前提下,再進行 .htaccess 設定,才能確保網站穩定且安全地運作。
常見問題
Q1.為什麼 HTML 副檔名也可以執行 PHP?
HTML 副檔名本身並不會執行 PHP,而是透過伺服器設定,將該副檔名指定交由 PHP Handler 處理。只要 PHP Handler 正常運作,即使檔案副檔名是 .html,仍然可以執行 PHP 程式碼。
Q2.設定 HTML 執行 PHP 一定要修改 .htaccess 嗎?
在多數 cPanel 虛擬主機環境中,透過 .htaccess 設定是最常見且安全的方式。這樣可以只影響單一網站目錄,不會改動整個主機的全域設定。
Q3.不同 PHP Handler 會影響 .htaccess 的寫法嗎?
會的,因為不同 PHP Handler 在 Apache 中的模組名稱不同,因此 .htaccess 中指定副檔名交由 PHP 處理的寫法也會有所差異。設定前建議先確認主機實際使用的 PHP Handler。
Q4.CloudLinux 虛擬主機需要自己設定 PHP Handler 嗎?
不需要。CloudLinux 環境中,PHP Handler 通常已由系統預先設定完成,使用者只需將 HTML 副檔名正確指定給系統既有的 PHP 執行方式即可。
Q5.WordPress 可以真的把 PHP 轉成 HTML 嗎?
WordPress 本身仍然是以 PHP 執行,並不會真正將 PHP 程式轉換成 HTML。不過透過快取或靜態化外掛,可以將輸出結果以 HTML 形式提供給訪客,達到類似靜態頁面的效果。
Q6.為什麼設定錯誤的 PHP Handler 會導致 500 Internal Server Error?
當 .htaccess 指定的 PHP Handler 在系統中不存在、未啟用,或執行權限不符時,Apache 在嘗試交付請求時會發生錯誤,進而回傳 500 Internal Server Error。此類問題多半可透過錯誤記錄快速定位。
Q7.CloudLinux 的 lsphp 為何適合搭配 HTML 副檔名執行 PHP?
lsphp 採用常駐行程模式,能有效降低頻繁啟動 PHP 行程的資源消耗,並可與 CloudLinux 的 CageFS、資源限制機制整合。在這種架構下,將 HTML 副檔名交由 lsphp 處理,對效能與穩定性影響相對可控。
Q8.WordPress 使用快取產生靜態 HTML,與伺服器層級設定有何不同?
WordPress 快取或靜態化方案通常是在應用層將 PHP 執行結果儲存為 HTML 檔案供後續請求使用,而伺服器層級設定則是讓指定副檔名在每次請求時仍由 PHP Handler 即時執行,兩者在執行時機與資源使用策略上有所不同。
Q9.在高流量網站中,是否建議讓 HTML 副檔名直接執行 PHP?
在高流量情境下,是否採用 HTML 副檔名執行 PHP,應視快取策略與資源配置而定。若未搭配有效快取機制,仍可能增加 PHP 執行負擔,實務上常會結合反向代理或快取層進行最佳化。
文章來源 : https://wpoki.com
GIPHY App Key not set. Please check settings