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]+)/?
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,都可以完美运行以上代码,实现附件链接伪静态。
] = 'index.php?attachment_id=$matches[1]';
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
3、最后删除原来的伪静态规则
设置好后,如果点击附件链接出现 404 错误,一般是因为伪静态规则有缓存,先在“设置>固定链接”里面把固定链接结构设置成默认的,以清除伪静态缓存规则缓存,然后再设置成文章名就可以了。
以上的伪静态代码是通过 WordPress 的伪静态系统处理的,与网站运行的平台无关,只要你的主机支持伪静态功能,不管是 Nginx 还是 Apache,都可以完美运行以上代码,实现附件链接伪静态。