解决Emlog文章详情页伪静态后URL不是唯一地址的教程

emlog教程 2020-08-25

  使用EM

  博客程序的朋友应该知道,伪静态后URL不是唯一性的,

  舍力举个很简单的例子:

  默认地址为:https://www.bokebu.com/1.html

  地址1:https://www.bokebu.com/xx/931.html,

  地址2:https://www.bokebu.com/?post=931

  也是可以正常打开的,其中的XX为任意数字或者字母

  这个是因为伪静态规则的问题,因为正则匹配 /([^http://www.bokebu.com/?=]+)(.html) 可以匹配 / 开始 一个或多个 不是 . / ?=之外的字符 然后.html 结束的字符串 所以不管你加什么,都只会匹配 /1.html 这一部分,那么如何解决这一问题呢?

  舍力不懂伪静态规则,不过用php到是解决了这个问题,

  舍力提供的方法非常的简单粗暴,不知道有没有Bug的哦

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

  

  $page=isset($params[5])?intval($params[5]):1;//文章页代码

  $ymurl=$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’];//浏览器获取URL

  //$emurl=preg_replace(‘/(http://|https://|)*/’,”,Url::log($logid));//去除http://或https://的默认url

  $emurl=str_replace(array(“http://”,”https://”),”,Url::log($logid));//去除http://或https://的默认url

  if($emurl!=$ymurl && $page==1){//判断2者是否相同,是否第一页

  header(‘HTTP/1.1 301 Moved Permanently’);

  header(‘Location:’.Url::log($logid));//不同时调整到默认URL

  }

  ?>

  如何没有修改过em内核路径的朋友们建议使用以下代码(速度更快),即没有按此教程

  emlog去除分类目录前的sort》修改过的,如果有修改过就只能使用上面代码

  

  $page=isset($params[5])?intval($params[5]):1;

  if(BLOG_URL.trim(Dispatcher::setPath(),’/’) !=Url::log($logid) && $page==1 && $p==”){

  header(‘HTTP/1.1 301 Moved Permanently’);

  header(‘Location:’.Url::log($logid));

  }

  ?>

  如遇问题,请在本页留言。

  注意:使用上面代码,如果文章页有分页的可能造成错误哦

评论 (0)
    Top