关于外链转内链

之前配置过博客网站文章内容的外链转内链,具体我也记不得出处是哪个了,可以看这个《WordPress 文章正文中的外链转内链,PHP源代码分享》出处好像是,使用后发现并不适合我的网站,因为启用了二级域名做图床,所以会自动判断图片为外部链接,图片虽能正常加载,但是启用灯箱效果之后,图片是打不开的,后来在v2ex上提问找到了解决方法,详见《正则匹配》,正则匹配出为图片的url地址并排除:

preg_match_all('/href="((?:(?!\.jpg|jpeg|gif|bmp|png).)*)"/',$content,$matches);

使用了一段时间之后才发现问题,虽然可以解决过滤二级域名图床的问题,但是同一段落里如果存在多个外链,只会把第一个外链转为内链,其余均正常。这个小问题想了很久也没能解决,后来我就厚着脸皮去找knoo7,他说是正则匹配的问题,因为它的默认是贪婪匹配,尽可能多的匹配url数据,所以才会出现同一段落只转换第一个外链为内链的情况,改用非贪婪匹配即可!即:

preg_match_all('/href="((?:(?!\.jpg|jpeg|gif|bmp|png).)*?)"/',$content,$matches);

对正则这块说实话真心不懂啊,坑啊!感谢@kn007

附上完整代码

// 排除文章内图片的外链
add_filter('the_content','baezone_the_go_url',999);
function baezone_the_go_url($content){
	preg_match_all('/href="((?:(?!\.jpg|jpeg|gif|bmp|png).)*)"/',$content,$matches);
	if($matches){
		foreach($matches[1] as $val){
			if( strpos($val,home_url())===false ) $content=str_replace("href=\"$val\"", "href=\"" . get_bloginfo('wpurl'). "/go?url=" .$val. "\"" ."target='_blank'",$content);
		}
	}
	return $content;
}

另外去除了站点Pjax的加载,为了这个效果不得不修改很多地方,觉得麻烦,索性直接删除!忙里偷闲在修改beautymind这款主题,一些小bug修复后就开始启用!

环境进行了一些修改,php升级到5.6.9,mysql升级到5.6.23,ssh的配置上也进行了一些小修改!使用密钥验证登陆来取代密码登陆,没办法,被逼的!每天登陆日志几万条的数据,看着真心不舒服,So,祭上fail2ban,虽不能杜绝,但是可以小小的心里安慰一下!具体配置就不贴出了,google一下会更好!

If your dream was big enough and you had the guts to follow it, there was truly a fortune to be made.

50 条评论

  1. 从良未遂

    我使用了以后发现不能有外链图片的网站图片显示不了了

    • Recordmind

      @从良未遂 我用的规则是排除外链图片的 就是说只要是外链的图片都不转换为内链 你用的是没有对图片进行排除,所以图片会不显示

  2. CK

    外鏈轉內鏈會對SEO比較好嗎?

  3. 杭州网站设计

    是这样好

  4. 笑笑笑

    刚学会两个最几本的正则式。。

  5. 咚门

    正则确实很多时候很蛋疼,一个小问题搞大半天也匹配不好。

  6. FROYO

    看的有点迷糊,没搞明白这是做什么用的

  7. kn007

    端午安康

  8. enso四叶草

    端午节快乐。大哥 ψ(`∇´)ψ

  9. 康斯坦·丁

    然而这并没有什么卵用

  10. xiao

    博主技术控。
    我反正是看不懂。_(:з」∠)_

  11. Jevy

    这个转换有什么用呢?

  12. 老杨

    折腾!

    端午节快乐。

  13. 从良未遂

    可能是在我那里看到的外链转内链

  14. 花千树

    这专业的让我不(zhen)忍(kan)直(bu)视(dong),哈哈
    所以果断留名然后去睡觉了。

  15. 酒衫

    我用的图片都是外链自己的图床…我不会折腾什么技术。。。

  16. wys.me

    “灯箱效果”是什么,度了一次娘也没搞清楚。。。

    • Recordmind

      @wys.me 图片点击放大的那种效果,表达的不清晰 sorry

      • wys.me

        @Recordmind 怎么度娘肚里没你这话?要么我早明白了。“图片点击放大”我能懂。 ♪(´ε` )

  17. whisperer

    擦,我的评论呢。。。

    • Recordmind

      @whisperer 昨天备份恢复的时候 丢了几条评论 你运气真好!

      • 锋子

        @Recordmind ᕕ╏ ͡ᵔ ‸ ͡ᵔ ╏凸 BS你……

        • Recordmind

          @锋子 为嘛?

          • 锋子

            @Recordmind 看俺和老何下面躺着多无聊,都不鸟我们…… ε = = (づ′▽`)づ

          • Recordmind

            @锋子 其实我是回复老何了,他应该受到邮件回复通知了,没有回复你,哈哈!主要不知道咋接你的“梦有多大,世界便有多宽广……”这句

          • 锋子

            @Recordmind 哈哈,你写得最后一句英文不就可以那么翻译咩……

          • Recordmind

            @锋子 这么理解也可以,是电影《奔腾年代》里爸爸吟诵的那首诗的一句!原意大概是“如果你的梦想足够远大,你又有勇气去追随它,财富便唾手可得。”

          • 锋子

            @Recordmind 还是我这个更简洁更诗意一点……话说你的域名又被QQ邮箱不信任了!

          • Recordmind

            @锋子 抽空检测一下,不知道哪里又抽了

          • Recordmind

            @锋子 是因为邮件里面附带图片了,郁闷!

      • kn007

        @Recordmind 这也能丢失 ㄟ( ▔, ▔ )ㄏ
        我一般更新,会做备份,然后直接关掉nginx,使用varnish的缓存给大家访问,更新完,再开启 o(*≧▽≦)ツ┏━┓

        • Recordmind

          @kn007 我们备份的方式不一样所以就…..
          唉。。。。 吃一堑长一智啊

  18. 锋子

    梦有多大,世界便有多宽广……

  19. MrHe

    mysql不会升级啊,我的还是5.1

评论已关闭