[WordPress问题解决]禁用Pingbacks、Trackbacks和HTTP头中的rel=shortlink、X-Pingback

最近刚搬站,在使用站长平台的“抓取诊断”工具后,返回的HTTP头中发现了如下两行:

Link: <https://51guaq.com/?p=26981>; rel=shortlink
X-Pingback: https://51guaq.com/xmlrpc.php

作为强迫症晚期患者的我当然不能让它继续存在于HTTP头中,这个短链接Link非但没用而且对于网站的SEO更是可能有影响。X-Pingback也是曾经被曝出xmlrpc.php文件被黑客利用而攻击网站的案例。禁用Trackbacks和Pingbacks将有利于wordpress网站载入速度的提升。

禁用 link 头部信息

//屏蔽WP产生的rel=shortlink头部信息
remove_action( 'template_redirect','wp_shortlink_header', 11, 0);
//屏蔽WP自带API产生的头部信息
remove_action( 'template_redirect','rest_output_link_header', 11, 0 );

禁用 Pingback 功能:

add_filter('wp_headers', function($headers, $wp_query){
    if(isset($headers['X-Pingback'])){
        unset($headers['X-Pingback']);
    }
    return $headers;
}, 11, 2);
add_filter('pre_option_enable_xmlrpc', function($state){
    return '0';
});
add_action('wp', function(){
    remove_action('wp_head', 'rsd_link');
}, 9);
add_filter('bloginfo_url', function($output, $property){ 
    return ($property == 'pingback_url') ? null : $output;
}, 11, 2);
add_action('xmlrpc_call', function($method){
    if($method != 'pingback.ping') return;
    wp_die(
        'Pingback functionality is disabled on this Blog.',
        'Pingback Disabled!',
        array('response' => 403)
    );
});
//关闭 XML-RPC 离线发布
add_filter('xmlrpc_enabled', '__return_false');

但如果只是想禁用Pingback功能,但让离线发布还能继续使用那么可以使用下面的代码:

//WordPress 关闭 XML-RPC 的 pingback 端口
add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
function remove_xmlrpc_pingback_ping( $methods ) {
    unset( $methods['pingback.ping'] );
    return $methods;
}

将以上代码复制到functions.php中即可。

禁用旧文章的Trackbacks和Pingbacks:

UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'post'; 
UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'page';

以上需要复制到MySQL数据库管理工具phpMyAdmin中的“SQL”中运行。

共有 0 条评论

Top