1. 程式人生 > >wordpress 固定連結設定後 出現404錯誤,不能訪問文章的解決辦法

wordpress 固定連結設定後 出現404錯誤,不能訪問文章的解決辦法

 

如果你的Apache、PHP、Mysql系統架構是自己配置的,或使用的某些安裝包,可能會有這個問題,本人曾經遇到過,用第五條解決,如下:

AllowOverride Not Enabled
伺服器可能沒開啟AllowOverride。如果httpd.config的AllowOverride設定的是None,那.htaccess將被忽略。正確的設定:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
也需要在DocumentRoot開啟AllowOverride:

<Directory /var/www/html>
# ... other directives...
AllowOverride All
</Directory>

固定連結的其它知識:

1. 首先介紹下,固定連結。

固定連結是你個人部落格裡的文章、分類以及其他頁面的固定連結地址。如果部落格的固定連結變化,會造成其他人通過之前的連結地址來瀏覽部落格時出錯,所以每篇部落格的連結地址都應該固定,而且永久不改———這也是固定連結名字的由來。

固定連結的型別:目前共有三種基本的型別:

(2)mod_rewrite: "漂亮的連結"

使用mod_rewrite或lighttpd可以生成更好看的連結地址(檢視 漂亮的連結),有各種個樣的連結格式,最常見、最通用的格式如下

(3)PATHINFO: "比較好的連結"
PATHINFO型別的連結地址和mod_rewrite型別的地址看起來很像,唯一的區別是在前面多了/index.php,如下:

http://example.com/index.php/yyyy/mm/dd/post-name/除此之外,和mod_rewrite型別的地址一樣,也具有同樣的可配置性。任何mod_rewrite連結地址可以做的事情,PATHINFO也可以。

2. 選擇你的固定連結結構

在設定 → 固定連結,可以選擇預設格式,也可以使用結構標籤在自定義結構的輸入框裡輸入你想要的格式。如果想啟用PATHINFO型別的連結地址,只要將地址以index.php/開頭。

確保以%post_id%或%postname%結尾(如/%year%/%monthnum%/%day%/%postname%/),以便每個地址對應唯一的一篇部落格。
出於效能上的考量,不推薦以部落格型別、部落格標籤、部落格作者、部落格標題作為固定連結地址的開頭這些都是純文字的屬性(field),使用它們作為連結的開頭,WordPress需要更多的時間區分文章(Post)地址和頁面(Page)地址,而且為了區分還要在資料庫裡儲存額外的資訊,帶來不必要的開銷。推薦使用數字的屬性(field)作為連結的開頭,如年份或文章ID。

%year%
文章發表的年份,四位數,如 2004
%monthnum%
月份,如 05
%day%
天,如 28
%hour%
小時,如 15
%minute%
分鐘,如 43
%second%
秒,如 33
%postname%
文章標題的別名 (編輯文章/頁面時的別名欄)。對於文章標題為 “This Is A Great Post!” 的%postname%是this-is-a-great-post(檢視 僅僅使用 %postname%)。 出於效能原因,強烈不建議使用%postname%作為連結地址的開頭。 *** 注 - 從WordPress 2.0開始這條建議可以無視了。
%post_id%
文章的唯一ID,如 423
%category%
分類的別名 (新建/編輯分類時的別名欄)。 有層級關係的型別在連結地址裡就像有層級的目錄。 出於效能原因,強烈不建議使用%category%作為連結地址的開頭。
%tag%
標籤的別名(新建/編輯標籤時的別名欄)。 出於效能原因,強烈不建議使用%tag%作為連結地址的開頭。
%author%
作者的別名。

3.自定義固定連結的問題。
當建立或更新“漂亮”固定連結結構時,WordPress會生成新的重寫規則並插入到.htaccess檔案中。如果出錯,WordPress會提示You should update your .htaccess now並且告訴你哪些重寫規則需要拷貝和貼上到.htaccess檔案(貼上到檔案的末尾)。

WordPress不會刪除.htaccess中任何已存在的重寫規則或目錄。如果有其他重寫規則,把它們放到WordPress的重寫規則的前面。

(1)我的.htaccess在哪裡?
Wordpress的index.php和.htaccess都在部落格地址目錄下,部落格地址在設定,常規選項裡可以查到。由於有個"."在檔名中,FTP客戶端可能看不到,除非你修改FTP客戶端的設定,使其顯示所有檔案,包括隱藏檔案。如果你是通過Godaddy Hosting Connection installation來安裝WordPress的話,有些主機提供商(如Godaddy)不顯示或不允許你修改.htaccess檔案。

(2)建立和編輯(.htaccess)
如果還沒有.htaccess檔案,建立一個。如果能通過shell或ssh連上伺服器,直接輸入touch .htaccess就建立了。如果使用FTP上傳檔案,可以在本地建立檔案,如1.htaccess,上傳到WordPress的跟目錄,然後重新命名為.htaccess。

可以通過FTP,shell或主機提供商可能提供的控制面板來編輯.htaccess。

如果.htaccess有錯而導致("Internal Server Error (500)"),可以使用FTP或控制面板刪除出錯的.htaccess。

(3)自動更新 .htaccess
如果WordPress不能自動更新.htaccess,它會告訴你原因,如.htaccess檔案可寫,才會自動更新,但是目前不是可寫的…,這個提示在設定→固定連結面板的底部。

想讓WordPress自動更新,必須給WordPress開通.htaccess檔案的寫許可權. 確切的許可權依賴於你的伺服器環境,嘗試給檔案擁有者開啟寫許可權,然後作者所在組開啟寫許可權,然後所有人,一步一步測試,一旦WordPress有了寫許可權,則不要再進一步放寬許可權。

(4)不使用mod_rewrite的固定連結

漂亮的固定連結通常需要mod_rewrite,但是IIS(Windows servers)不支援mod_rewrite。(如果在Windows上使用Apache 2.0.54,mod_rewrite可以正常工作,需要在apache\conf\httpd.conf開啟這個模組。)

如果使用IIS 7且有伺服器的管理許可權,可以使用Microsoft的URL Rewrite模組。雖然和mod_rewrite不是完全相容,但是支援WordPress的“漂亮”連結。安裝後開啟WordPress資料夾下的web.config,新增下面的規則到 system.webServer節點。

4. 固定連結遇到的問題和解決

.htaccess一般性問題
對於WordPress沒有生成.htaccess檔案或不將新的重寫規則寫到已存在的.htaccess檔案,原因各種各樣,按照下面的步驟,一步一步,注意,當且僅當上一步無效後再繼續下一步。

(1)修改許可權: 使用chmod將 .htaccess的許可權改為666,以便使用template editor編輯,但是不推薦這樣做,因為這樣的話其他有編輯模板許可權的使用者也能編輯.htaccess,可以將許可權改為660。
(2)伺服器阻止修改: 伺服器有可能阻止了SERVER_SOFTWARE變數的設定,導致生成.htaccess失敗。如果確定使用的是Apache,修改wp-includes/vars.php,跟著下面的步驟走。
詳看:http://codex.wordpress.org/zh-cn:%E4%BD%BF%E7%94%A8%E5%9B%BA%E5%AE%9A%E9%93%BE%E6%8E%A5

5.修復其他問題

如果正確生成.htaccess但固定連結還是有問題,到WordPress論壇How To版發帖子求助。

AllowOverride Not Enabled
伺服器可能沒開啟AllowOverride。

如果httpd.config的AllowOverride設定的是None,那.htaccess將被忽略。正確的設定:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
也需要在DocumentRoot開啟AllowOverride:

<Directory /var/www/html>
# ... other directives...
AllowOverride All
</Directory>
對於使用Mac OS X伺服器的,還要修改/etc/httpd/sites/中的AllowOverride。
如果不想設為all,參考Apache Core Features.
翻頁有問題
有時候翻到第二頁或其他頁不能正常工作,地址如下:
http://www.example.com/page/2/
http://www.example.name/category/categoryname/page/2/
http://www.example/year/month/day/page/2/
http://www.example/year/month/page/2/
訪問上面的任何一個連結,出現提示說: "Sorry, no posts match that criteria."
這是.htaccess造成的,刪掉,重新生成就好了。
如果還不行,到這裡看看this support post.

6.小貼士和小技巧

如果想在Google News上展示你的網站,你的連結地址至少以3個數字結尾,通過%postname%-%post_id%很容易做到,最後生成的URL如http://mysite.com/cooking-tips-tricks-344。

地址以.html結尾
使用結構標籤很容易做到這一點,如
需要注意的是,這並不會生成靜態的html檔案,僅僅是用.html作為字尾,頁面還是動態生成的。這是否會給SEO帶來好處還無定論,但是當你想從WordPress搬家時,將帶來很多便利,因為所有頁面可以很容易地變成靜態的,而且地址不用改變。

避免固定連結地址被解析成歸檔連結
也許有的人一天頂多發一篇部落格,於是使用%year%%monthnum%%day%這樣的固定連結,這樣的連結會解析成這一天所有的文章,為了避免這個問題,最好使用%year%%monthnum%%day%%hour%。

檢查固定連結結構
檢查部落格是否有固定連結結構,使用如下程式碼:

if ( get_option('permalink_structure') != '' ) { echo 'permalinks enabled' }