跟使用免費的 blog 服務相比,自行架設 WordPress 有許多好處:首先,對自己的網站有完全的掌控權力,不受服務營運影響,無名小站當初關閉就是一個血淋淋的例子,轉換服務是個很長的陣痛期,當所有圖片文章內容都要轉移,夠令人頭痛了。再來就是廣告,免費 blog 服務,如 pixnet,整個網站擺滿廠商的廣告,你沒有選擇。相比之下 WordPress 可以自行加入如 AdSense 的廣告計劃,靠內容賺錢,對於要擺多少廣告,擺在哪裡也有完整的主控權。
當然自行架設不是沒有缺點,例如需要付費找間可靠的主機商,要自己定時更新WordPress,程式出問題要自己想辦法修復,對初學者來說,可能不是那麼容易。今天要跟各位分享一個 WordPress 常見的問題:WordPress wp-admin 區域出現”重新導向次數過多“,Chrome 瀏覽器會出現 ERR_TOO_MANY_REDIRECTS。
WordPress 內建對 SEO 有利的 url 結構 (靜態網址),例如 ‘ggg.com.tw/2015/07/google-postmaster-tools/’,這種靜態網址本身是使用 rewrite 的方式達成,所謂 rewrite 就是利用 Apache 的 Rewrite engine,針對使用者下的規則做比對,若符合就將網址”重寫”。所以您可以在你的 WordPress 目錄中的 .htaccess 看到下列 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>
許多外掛也會用到重新導向功能,而當 WordPress 升級或是設定錯誤時,使用者可能被導向一個頁面,又被導回原本的頁面,在這種情況下,使用者的瀏覽器會被導入一個無窮的迴圈,所以瀏覽器在導向一定次數後就會秀出此錯誤訊息:”這個網頁含有重新導向迴圈”,或是”ERR_TOO_MANY_REDIRECTS”。
一般來說單純 rewrite 造成的迴圈直接會被 Apache 吐 500 Internal Server Error 訊息,可能是 rewrite 搭配 php 程式做重新導向時造成迴圈,這時才是由瀏覽器吐 ERR_TOO_MANY_REDIRECTS。
若用戶直接是看到 Internal Server Error,且 error_log 看到下列錯誤訊息 (虛擬主機用戶可在cPanel > 錯誤紀錄 看到),那就可以直接判斷是 .htaccess rewrite rule 爛了,直接把 rule 註解或移除試試看。
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use ‘LimitInternalRecursion’ to increase the limit if necessary. Use ‘LogLevel debug’ to get a backtrace.
至於瀏覽器的”這個網頁含有重新導向迴圈“,此問題最常見到的原因是網址設定有誤,通常情況我們可以在 wp-admin 後臺透過 設定 >> 一般設定,來變更網站網址,不過如果連 wp-admin 區域都無法登入了,我們可以透過修改 wp-config.php 來達成:
define('WP_HOME','http://example.com'); define('WP_SITEURL','http://example.com');只要將此兩行加入 wp-config.php 再上傳到 WordPress 的目錄即可(當然請記得將 example.com 改為您的網址)。
若這樣還是無法解決,那可能是 plugin 造成的問題,這時候我們先把所有的 plugin 關閉試試看,首先登入 FTP 或是使用 cPanel 的檔案管理員,將 wp-content/plugins 下的目錄都刪除 (當然要先備份),或是直接把 wp-content/plugins 改名,例如改為 wp-content/plugins.backup,接下來把 .htaccess 備份後刪除,接下來再登入 wp-admin 看看,應該就可以迎刃而解喔!
如果確定是 plugin 的問題,首先可以把 .htaccess 檔案先傳回去,檔案裡面可以先用 # 把其他語法註解,只留下 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>接下來可以將 plugin 一個一個恢復,wp-content/plugins 下會有各個外掛的目錄,你只需要一次傳一個外掛目錄上去,再到後台啟用看看該外掛是否會造成問題即可。