Thursday, November 14, 2019

WordPress修改固定鏈接後設置301重定向

本站原來使用的WordPress的固定鏈接結構太長,想修改為最簡單的/%postname%.html格式,但各大搜索引擎已經收錄了不少文章,修改後可能會影響搜索引擎的收錄。所以必須要做一下網站鏈接的301重定向。

301重定向(301 redirect)是指網址的永久性轉移(Permanently Moved),當網站在搜索引擎索引庫中的網址發生改變時,搜索引擎並不能及時改變索引庫中的網址。網站管理員通過對網址的301重定向轉移,可以避免損失來自搜索引擎的用戶。更重要的是,通過301重定向轉換,URL的權重、Google PR值都能夠不受影響地傳遞。因此301重定向也是網頁更改地址後對搜索引擎非常友好的一種方法。

要實現網站的301重定向,有很多方法,新手推薦使用WP Permalinks MigrationRedirection插件,簡單友好,自帶中文設置界面。也可以通過修改.htaccess文件進行301重定向,從而實現WordPress固定鏈接形式的更改。

一、使用WordPress插件實現301重定向

使用WordPress插件固定鏈接301重定向的方法最簡單,方法如下:

1、下載並安裝倡萌的WordPress插件WP Permalinks Migration

2、啟用插件以後,進入WordPress後台的Settings(設置)–>WP Permalinks Migration,可以看到一般會自動識別原來的鏈接樣式,如果沒有自動識別原來的鏈接樣式,那就你手動填寫,並按左下角的按鈕保存設置。

3、在WordPress後台的Settings(設置)–>Permalinks(永久鏈接)–>修改為你想要的樣式,保存即可,這時候,訪問原來的鏈接,就可以自動跳轉到你的新鏈接!

二、利用.htaccess實現URL重定向(redirect)

1、什麼是.htaccess
根據維基百科,.htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。通過htaccess文件,可以幫我們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。

2、.htaccess中用到的正則表達式
和通配符類似,正則表達式也是用來進行文本匹配的工具,只不過比起通配符,它能更精確地描述你的需求。

^ –> 匹配字符串的開始
$ –> 匹配字符串的結束
^$ –> 可以用於確定字符串,即可以用於確定起點或終點。例如:^$ —— 空字符串
s –> 匹配任意的空白符
w –> 匹配字母或數字或下劃線或漢字
b –> 是正則表達式規定的一個特殊代碼代表着單詞的開頭或結尾,也就是單詞的分界處
d –> 匹配一位數字
W (大寫) –> 匹配任意不是字母,數字,下劃線,漢字的字符
S (大寫) –> 匹配任意不是空白符的字符
D (大寫) –> 匹配任意非數字的字符
B (大寫) –> 匹配不是單詞開頭或結束的位置
“ . ” –> 匹配除了換行符以外的任意字符
“ * ” –> 它代表的不是字符,也不是位置,而是數量——它指定 * 前邊的內容可以連續重複使用任意次以使整個表達式得到匹配。“ * ”連在一起就意味着任意數量的不包含換行的字符
“ + ” –> 是和“ * ”類似的元字符,不同的是 * 匹配重複任意次(可能是0次),而 + 則匹配重複1次或更多次。
“ ? ” –> 重複零次或一次
“ – ” –> 不是元字符,只匹配它本身,即連字符(減號)

3、舉例說明
示例一:原固定鏈接/personal/article/%year%/%postname%.htm改為/%postname%.html
重定向語句:

RedirectMatch 301 ^/personal/article/([0-9]+)/(.*)$ /$2l

RedirectMatch 301 ^可以理解為語句正式開始,/personal/article/是原固定鏈接結構,非變量,([0-9]+)可以理解為對應/%year%/,(.*)可以理解為最後的文章名稱或者ID,這2個變量分別可以賦予編號$1,$2,。(.*)和$2l之間的那個$可以理解為老網址和新網址之間的分割。

示例二:原固定鏈接/%year%/%monthnum%/%day%/%postname%/改為/%postname%.html
重定向語句:

RedirectMatch 301 ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*)/$ /$4.html

RedirectMatch 301 ^可以理解為語句正式開始,中間三個([0-9]+)可以理解為分別對應%year%/%monthnum%/%day%,(.*)可以理解為最後的文章名稱或者ID,這四個變量分別可以賦予編號$1,$2,$3,$4。(.*)和$4.html之間的那個$可以理解為老網址和新網址之間的分割。

我們要修改的,就是把地址中的日期全都不要了,只要第四部分的文章名,然後在文章名後面加上.html來實現偽靜態

也就是說,那三個([0-9]+)都不要了,只要(.*)部分,而(.*)對應於$4,所以現在的網址只寫上$4.html就行了,也就是以前的(.*).html

示例三:/%post_id%修改為/%category%/%post_id%.html
因為%post_id%肯定是數字,而上面說過,正則表達式中(d+)對應任意數字,所以以前的網址可以寫成/(d+)
而%category%是分類,肯定是字符,不管是漢字還是字母,正則表達式中(.+) 對應的是任意字符(包括漢字、英文字母等),所以新的網址可以寫成/(.+)/(d+).html
在原網址中,%post_id%即(d+)對應於$1,所以新網址為/(.+)/$1.html
然後用$將新舊網址連接起來,寫成301重定向語句:
重定向語句:

RedirectMatch 301 ^/(d+)$ /(.+)/$1.html

4、該如何寫自己的重定向語句

A:你要弄清楚自己的原網址每一部分是什麼形式,數字?字符?然後分別用上面的正則表達式符號來對應,(.+) 對應的是任意字符(包括漢字、英文字母等),(d+)對應的是任意數字(僅僅是阿拉伯數字)
因為文章名稱中可能含有字母,可能含有數字,所以要用(.*)來對應,(.*)表示任意的東西
B:將原網址每一部分分別對應,按照順序,依次用$1/$2/$3/$4/$5來對應
C:寫出新網址,按照寫原網址的規則來寫,不再累贅
D:用$來連接新舊網址,寫成301重定向語句(新網址中與原網址相同的部分要用符號來代替,用$1、$2、·····來代替)
注意,$和後面的新網址之間有一個空格。而且,如果原網址最後有/的話,在$之前也必須有一個/

5、注意事項
WordPress會自動修改.htaccess文件中# BEGIN WordPress和# END WordPress之間的內容,即使你並沒有修改過固定連接。只要點擊了“固定連接”,.htaccess文件中# BEGIN WordPress和# END WordPress之間的內容就會被更改,自動還原。
因此,如果你要添加自己的語句而不被替換的話,將自定義的匹配規則寫在.htaccess中的# BEGIN WordPress和# END WordPress之外即可。

參考文章:
http://lesca.me/archives/htaccess-rewrite.html
https://teddysun.com/182.html

Related Post

5 comments

  1. 一般來說,直接安裝WP Permalinks Migration插件就可以。

  2. 博主你好,我以前的固定連接是/%postname%.html 現在的是/%category%/%post_id%.html 可否告知下我這個的規則應該如何寫?這個問題拖了好久了,百度收錄一堆404,自己折騰老不對,請教朋友要麼是不會要麼是瞎扯淡,跟我說這2種無法轉換。。先說聲謝謝。

  3. 非常感謝,唯一一個幫上忙的教程……

  4. 谷歌反應最快,已經全部收錄新地址。百度以新地址收錄了新發的文章,已經收錄的文章目前還沒有變化,已經向百度站長平台提交了正則規則。

  5. 你301完固定鏈接後,Google、百度用了多久收錄新地址?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.