使用EM个人博客程序的朋友应该知道,伪静态后URL不是唯一性的,举个很简单的例子:

标准地址为:http://域名/1.html

但同时地址:http://域名/xx/1.html,http://域名/?post=xxx也正常打开,其中的XX为任意数字或者字母

 这个是因为伪静态规则的问题,因为正则匹配 /([^./?=]+)(.html) 可以匹配/ 开始 一个或多个 不是 . / ? = 之外的字符 然后.html 结束的字符串所以不管你加什么,都只会匹配 /1.html 这一部分,那么如何解决这一问题呢?我不懂伪静态规则,不过用php到是解决了这个问题,提供的方法非常的简单粗暴,不知道有没有Bug的哦。

本段代码通用代码,直接把下面代码放入echo_log.php和page.php第一行就可以了

<?php$page=isset($params[5])?intval($params[5]):1;$ymurl=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];$emurl=preg_replace('/(http://|https://|)*/','',Url::log($logid));if($emurl!=$ymurl && $page==1){header('Location:'.Url::log($logid));}?>

附:我测试后的bug提交

上文的代码我也是从网络上看到了,不知道转载了第几手了,上述文章的代码已经实现了Emlog日志页或单页网页后缀非.html则跳转404页面,但实际上如果你的如果修改了分类名,比如原博文地址为http://www.域名.com/xxx/xxx.html,修改为http://www.域名.com/aaa/xxx.html也能打开,这一点仍然未解决。实际上这才是最大的难点,因为深山的鹿博客的日志如果更换了分类,百度就回收录这两个地址,造成重复收录。