自定义 URL Rewrite Rules 规则实现附件页面伪静态


WordPress 默认的附件链接没有伪静态支持,而有一些网站是需要展示附件内容的,这时候,把附件链接转为伪静态的形式是很有必要的。比如下面的例子。

这个类似于百度文库的东西其实就是个由 Word 转换成的 swf 文件,上传到 WordPress 站点以后,直接点击附件链接就是截图中显示的样子,如果附件链接不做伪静态处理的话,看起来是这个样子的:`www.yoursite.com/?attachment_id=1336`,而我们需要吧链接显示成这个样子:`http://www.yoursite.com/doc/1336/`。下面我们来看一下附件链接伪静态的方法。

 WordPress 附件链接实现伪静态的方法

1、首先设置附件的固定链接

add_filter('attachment_link','wizhi_attachment_link',10,2);
function wizhi_attachment_link($link,$post_id){
    return home_url('/doc/'.$post_id.'/');
}

2、然后设置伪静态规则

add_action('generate_rewrite_rules', 'wizhi_generate_rewrite_rules');
function wizhi_generate_rewrite_rules($wp_rewrite){
       
    $wp_rewrite->rules = wizhi_remove_rewrite_rules($wp_rewrite->rules);
    $wp_rewrite->extra_rules_top = wizhi_remove_rewrite_rules($wp_rewrite->extra_rules_top);
       
    $new_rules = array();
    $new_rules['doc/([0-9]+)/?$'] = 'index.php?attachment_id=$matches[1]';
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

3、最后删除原来的伪静态规则

function wizhi_remove_rewrite_rules($rules){
    foreach ($rules as $key => $value) {
        if( strpos($value, 'attachment') !== false ){
            unset($rules[$key]);
        }
    }
    return $rules;
}

设置好后,如果点击附件链接出现 404 错误,一般是因为伪静态规则有缓存,先在“设置>固定链接”里面把固定链接结构设置成默认的,以清除伪静态缓存规则缓存,然后再设置成文章名就可以了。

以上的伪静态代码是通过 WordPress 的伪静态系统处理的,与网站运行的平台无关,只要你的主机支持伪静态功能,不管是 Nginx 还是 Apache,都可以完美运行以上代码,实现附件链接伪静态。

  • 分享:
评论
还没有评论
    发表评论 说点什么