利用php做高級301跳轉
作者:佚名 時間:2012-05-22 分享到:
1. IIS下正確實現基本的301跳轉:
如我為了保證網站域名單一性,集中權重,希望將pmume.com 301永久重寫向到www.pmume.com,那么:
1) 服務器:如果有服務器的操作權限,直接另外新建一個網站,然后在IIS上設置“資源永久重定向”:
2) 虛擬主機:在IDC虛擬主機后臺把不帶www的域名綁定一個子目錄,然后,在子目錄下放置一個index.php,在其中放上301跳轉的代碼:
header("HTTP/1.1 301 Moved Permanently"); header('location:http://www.pmume.com/'); exit; ?> |
上面服務器上直接IIS上的操作,不僅可以實現跳轉到首頁,勾選“資源的永久重定向”還可以實現原域名下所有子頁面都跳轉到新域名下對應頁面,而上面虛擬主機上的301跳轉代碼則只可實現首頁的跳轉或者單一目錄的跳轉。
2. 對應頁面跳轉的萬能301:URL偽靜態重寫+PHP301
對應頁面301跳轉的方法有很多,最笨的方法是手動一頁一頁301到對應的新頁面,但實際不具可操作性,除非只是少數幾個頁面,要是更新域名等的301,基本不可能。那么怎樣通用的實現對應頁面的301跳轉呢?URL偽靜態+PHP301又是怎樣操作的呢?
要實現對應頁面跳轉,首先要分析原頁面URL的結構,然后分析新頁面的URL規則,然后實現301的跳轉,落葉通過采用的URL偽靜態+PHP301的操作是通過分析原URL的規則,利用IIS中httpd.ini中的偽靜態功能,將原URL正則重寫到單一的PHP入口,然后通過該單一PHP中獲取到原URL的特征字符串,對應跳轉到新頁面的特征字符串。
上面一句話其實已經概括完了整個的操作方法,下面舉例說明實際的實現。
例一:我想將原放在子目錄下www.abc.com/bbs/訪問的論壇更換為bbs.abc.com。
a.偽靜態重寫URL:
將下面偽靜態規則放于根目錄下的httpd.ini文件中
[ISAPI_Rewrite] # 3600 = 1 hour CacheClockRate 3600 RepeatLimit 32 # Protect httpd.ini and httpd.parse.errors files # from accessing through HTTP RewriteRule ^(.*)/bbs/(.*)$ $1/bbs/301\.php\?go=$2 [L] |
作用:將BBS目錄下所有鏈接都重寫到index.php并使用go參數來傳遞,如http://www.abc.com/bbs/thread-112-1.html的鏈接重寫成http://www.abc.com/bbs/301.php?go=thread-112-1.html,下一步就是在index.php中接收go參數(如thread-112-1.html),301跳轉到http://bbs.abc.com/thread-112-1.html 。將內頁多入口轉換為經過index.php的單一入口,集中控制。
b.在301.php中接收參數,并實現301永久重定向:
$go=
利用php做高級301跳轉作者:佚名 時間:2012-05-22 分享到:1. IIS下正確實現基本的301跳轉:如我為了保證網站域名單一性,集中權重,希望將pmume.com 301永久重寫向到w.. 如沒特殊注明,文章均為上海聯楷網絡原創,轉載請注明來自:http://www.ktcbnqb.cn/contact/20151229/n7546.html
header("HTTP/1.1 301 Moved Permanently");//發送301狀態,之后的所有跳轉均為301 header('location:http://bbs.abc.com/'.$go);//根據go參數跳轉到對應頁面 exit; ?> |
例二:我原論壇放在www.abc.com主域名下的,現在主域名想做文章站,論壇換到bbs.abc.com下,我想原www.abc.com域名原論壇的部分URL全301到bbs.abc.com對應頁面,而新的文章內容不跳轉。
如www.abc.com/forum-1-1.html
www.abc.com/thread-1-1-1.html
www.abc.com/tag-%D6%AA.html
跳轉到 bbs.abc.com/forum-1-1.html
而www.abc.com/article/123.html等不跳轉。
a.分析你要部分跳轉的URL的種類及大致格式:
如你上面提到的要跳轉的有論壇版塊文章列表頁、論壇帖子內容頁、論壇的TAG標簽頁,這三類頁面的URL結構很典型,即你說的:
www.abc.com/forum-1-1.html www.abc.com/thread-1-1-1.html www.abc.com/tag-%D6%AA.html |
b.把這些特征頁面全偽靜態重寫到一個301.php頁面:
帖子列表頁:RewriteRule ^(.*)/forum-(.*)$ $1/301\.php\?go=forum-$2 [L] 帖子內容頁:RewriteRule ^(.*)/thread-(.*)$ $1/301\.php\?go=thread-$2 [L] Tag標簽頁:RewriteRule ^(.*)/tag-(.*)$ $1/301\.php\?go=tag-$2 [L] |
等等,其它特征頁類似重寫,需要你對偽靜態正則寫法有一定了解
3.PHP301對應跳轉:
$go=
利用php做高級301跳轉作者:佚名 時間:2012-05-22 分享到:1. IIS下正確實現基本的301跳轉:如我為了保證網站域名單一性,集中權重,希望將pmume.com 301永久重寫向到w.. 如沒特殊注明,文章均為上海聯楷網絡原創,轉載請注明來自:http://www.ktcbnqb.cn/contact/20151229/n7546.html
header("HTTP/1.1 301 Moved Permanently"); header('location:http://bbs.abc.com/'.$go); exit; ?> |
落葉原創的這個URL偽靜態重寫+PHP301方法(呵呵,如有雷同純屬巧合),百試不爽,但關鍵有一點,需要大家了解偽靜態規則的寫法。這一點其實涉及到一些正則表達式的知識,但是相信大家只要仔細看一下自己使用的CMS或者論壇程序提供的偽靜態規則,細心觀察上,就可以模仿上面例子的思路進行301跳轉了。