随了大流,看到卢松松、酷壳等等知名博客用的文章固定链接格式形如“/html/%post_id%.html”,而我用的自定义结构“/html/%post_id%_%postname%.html”,其生成的链接很长,显得不简洁,所以忍不住就换成了前面那种格式。不换还好,换了以后百度最近基本不收录本站了,关键词CppLive在百度搜索结果前一百名中站了三十多个席位,而现在拔得只剩下一个了,还排到了第二页,真是令人痛心。早知道就该做好重定向再更改固定链接格式啊,抱着亡羊补牢的心态,我决定做个重定向,让所有搜索引擎已经收录的老的固定链接地址能够自定跳转到新的固定链接地址上去。
例如以前的一篇文章被Google跟百度收录的链接是这样的https://www.cpplive.com/html/651_wordpress-add-sina-weibo.html,现在修改了固定链接以后变成了https://www.cpplive.com/html/651.html。我想达到的效果就是,网友通过搜索引擎搜索到该篇文章并点击以后,能够自动跳转到新的链接去。
由于本人用了万恶的Windows服务器,不支持.htaccess 301重定向,否则z在Linux服务器上,如下一条语句就能搞定。
RedirectMatch 301 ^/(\d+)_(.+)\.html$ /html/$1
咨询了空间提供商,给我的答复是301重定向只能通过配置IIS7 的 web.config 文件实现,上网Google了好久,发现IIS7下的301重定向,随随便便一条简单的都得好几十行代码,看着头疼啊,再说了我这还得分析了url内容后再有针对性的重定向,所以难度就更大了,所以果断放弃了301重定向。
我发现老的链接打开以后,因为找不到相应的页面,会自动跳转到404.php,那岂不是可以在404.php中分析URL地址,然后用PHP语言割掉URL中“%post_id%”后面的内容生成对应的新链接地址?而且我当时的采用“_”连接“post_id”与“postname”也为现在的分割带来了便利,我只要调用PHP中的strpos函数找到“_”,然后再调用explode函数割掉“_”及其以后的内容即可,因为不会有其他类型页面有“_”符号。
在Wordpress当前正在使用的主题目录下找到functions.php文件,加入如下代码。
/* 固定链接站内跳转,截取_以前url加.html,如果未找到_则返回主页 */ function frontWithIDPageURL() { $pageURL = 'http://'; $this_page = $_SERVER["REQUEST_URI"]; // 只取 _ 前面的内容 if (strpos($this_page, "_") !== false) { $this_page = reset(explode("_", $this_page)); $pageURL .= $_SERVER["SERVER_NAME"] . $this_page . '.html'; } else $pageURL .= $_SERVER["SERVER_NAME"]; return $pageURL; }
frontWithIDPageURL函数的功能在注释里面已经写得很清楚了吧。打开主题目录下的404.php文件,删除里面的所有代码,然后加入如下代码。
<script> location="<?php echo frontWithIDPageURL() ?>"; </script>
Script标签实现的功能就是跳转罗,用得很广泛的。这样做了以后,就的固定链接会自动跳转到新的固定链接了,但是404错误提示不再有了,会直接跳转到首页,这也挺好嘛。
大家可以点击如下老链接察看效果:
https://www.cpplive.com/html/651_wordpress-add-sina-weibo.html
希望百度能尽快恢复对CppLive编程在线的收录,阿门!~
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。