WordPress如何防採集辦法和解決思路,採用php最新語言

要想防止網站被惡意採集,那麼就需要了解大多數的採集方式和規則,這樣才能夠反其道而行之的去屏蔽和防採集,有時候我們辛辛苦苦寫的一些文章或者大批量的文章內容成為了別人的嫁衣,同時別人採集還增加服務器負擔,想想就覺得不值得啊。

WordPress

子凡我之所以決定要做這個防採集的想法有很久了,是因為前段時間有個網站不斷的換 IP 來採集我們淚雪網的問答內容,我禁用一個 IP,他換一個 IP,我後來把那個地區所有的 IP 段都屏蔽了,這才基本到止為止。我這麼忙的人總不能每天把時間都花在去看服務器 IP,去屏蔽 IP 這件事情上吧?

於是終於下定決心來做這件事情了,以前是想通過隨機給 WordPress 正文內容中插入網站名稱的字詞,然後通過內鏈樣式隱藏,但是這樣別人依舊能把內容採集過去,所以也遲遲沒有這樣做,後來突然反應過來,採集最重要的就是採集規則,而想要更好的採集就需要獲取到文章列表,這下子就很好做了。

簡單的來科普一下,採集時大多數人都是根據文章欄目和列表獲取採集文章的 URL 鏈接,所以最重要的就是翻頁,這也是幾乎所有網站暴露網站所有文章的一種方式,那麼最簡單的解決辦法就是讓網站列表不能無止境的翻頁,這樣就算能採集幾十篇的內容,也無法把整站的內容都採集走了。

//WordPress 禁止翻頁屏蔽/防採集
add_filter(‘pre_get_posts’,’fanly_basic_query_posts’);
function fanly_basic_query_posts($wp_query) {
if($wp_query->is_admin || !$wp_query->is_main_query()) return;
if ($wp_query->is_home || $wp_query->is_archive || $wp_query->is_search) {
$paged = 10;//超過 10 頁後就顯示 404
if($paged && $wp_query->get(‘paged’) > $paged){
//404 頁面
$wp_query->set_404();
status_header(404);
nocache_headers();
include(get_query_template(‘404’));//需要主題的 404.php
die();
//404 頁面
}
}
}
把以上代碼複製放到當前主題的 functions.php 文件中,就可以實現當 WordPress 翻頁超過 10 頁後就會調用 WordPress 主題的 404 頁面,可以通過修改代碼的 paged 參數值修改翻頁數量來自定義。

代碼中會對所有的列表頁面都生效,首頁、文章歸檔(分類、標籤、日期)、搜索頁面等都一視同仁,還可以根據自己需要添加判斷,根據不同的列表做不同的限制,子凡這裡就不展開分享了。

另外如果你的翻譯使用的是 get_next_posts_link(string $label=null, int $max_page) 來翻頁下一頁,還可以通過設置最大翻頁來避免出現翻頁死鏈的情況出現。

別看上面代碼行數多,其實 404 頁面那整段可以直接使用跳轉到首頁,甚至直接使用 die 結束,我這里分享只是為了漂亮的結束為 404 頁面而已。

如果為了更好的防止 WordPress 被採集,那麼還可以針對 feed、站點地圖 sitemap 等方面做屏蔽,因為 WordPress 的翻頁都有 page 參數所以還可以服務器屏蔽路徑的方式。讓採集獲取不到網站完整的列錶鍊接基本就能防止很大一部分採集。

由於我們 WordPress 交流群有人在問具體的欄目自定義屏蔽頁數怎麼辦,所以就再來稍微修整一下,一下代碼中的數字“10”就是可以自定義的,根據後面的備註修改就可以了。

//WordPress 禁止翻頁屏蔽/防採集(自動版本)
add_filter(‘pre_get_posts’,’fanly_basic_query_posts’);
function fanly_basic_query_posts($wp_query) {
if($wp_query->is_admin || !$wp_query->is_main_query()) return;
$paged = $wp_query->get(‘paged’);
if (($wp_query->is_home && $paged > 10)//首頁
|| ($wp_query->is_category(‘news’) && $paged > 10)//指定分類
|| ($wp_query->is_category && $paged > 10)//分類
|| ($wp_query->is_tag && $paged > 10)//標籤
|| ($wp_query->is_author && $paged > 10)//作者
|| ($wp_query->is_archive && $paged > 10)//歸檔
|| ($wp_query->is_search && $paged > 10)//搜索
) {
//404 頁面
$wp_query->set_404();
status_header(404);
nocache_headers();
include(get_query_template(‘404’));//需要主題的 404.php
die();
//404 頁面
}
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *