解决emlog文章详情页伪静态后URL不是唯一地址 - Emlog - 泪舞殇诚
解决emlog文章详情页伪静态后URL不是唯一地址
  • 首页 > Emlog
  • 作者:泪舞殇诚
  • 2015年6月6日 22:59 星期六
  • 浏览:71 次
  • 字号:    
  • 评论:0 条
  • 时间:2015-6-6 22:59   浏览:71  

    使用EM博客程序的朋友应该知道,伪静态后URL不是唯一性的,舍力举个很简单的例子:
    默认地址为:https://lwsc.love/1.html
    地址1:https://lwsc.love/xx/1.html,
    地址2:https://lwsc.love/?post=1
    也是可以正常打开的,其中的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'];//浏览器获取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》修改过的,如果有修改过就只能使用上面代码
    <?php $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)); } ?>



    本文发表自: 泪舞殇诚
    转载请保留原文链接:https://xinwei.org/emlog/14.html
     阅读这篇文章共花了: 
    博客地图 博主:泪舞殇诚    程序:Emlog Copyright © 2015-2020  泪舞殇诚  版权所有    豫ICP备19043290号
  • 文章:22 篇
  • 评论:0 条
  • 句子:21 条
  • 分类:8 个
  • 标签:5 个
  • 作者:1 人
  • 建站日期:2015-05-20
  • 第一次见到,就感觉是这个人了 ——Super junior李东海 李赫宰
    sitemap