Ruby On Rails nofollow到非内部链接

时间:2013-08-02 08:45:52

标签: ruby-on-rails ruby regex nofollow

我有一个文本段落,可能有外部或内部网址。用户将输入此文本。因此,我希望外部链接应添加rel=nofollow,而内部链接不会具有rel=nofollow属性。

内部链接可以是:

 <a href=http://www.mysite.com"> My Site </a> 


     <a href="/articles/1-world-cup-cricket-2015"> World cup schedule </a>

外部链接与往常一样......

我目前的功能是将rel=nofollow添加到所有内部和外部链接。

def add_nofollow html
  html.gsub(/\<a href=["'](.*?)["']\>(.*?)\<\/a\>/mi, '<a href="\1" rel="nofollow" target="_new" >\2</a>')
end

问题是如何仅将rel = nofollow添加到外部链接?

2 个答案:

答案 0 :(得分:2)

请参阅this link以获取我的示例。使用正则表达式<a href=["']((http://www.mysite.com)(/.*?){0,1}|/.*?)["']\>(.*?)\<\/a\>来使所有链接与您的内部链接匹配。

答案 1 :(得分:1)

在Ruby on Rails中,您可以使用正则表达式查找网址并为其添加rel = nofollow。

def add_nofollow html

 html.scan(/(\<a href=["'].*?["']\>.*?\<\/a\>)/).flatten.each do |link|
   if link.match(/\<a href=["'](http:\/\/|www){0,1}((localhost:3000|mysite.com)(\/.*?){0,1}|\/.*?)["']\>(.*?)\<\/a\>/)
    else
    link.match(/(\<a href=["'](.*?)["']\>(.*?)\<\/a\>)/)
    html.gsub!(link, "<a href='#{$2}' rel='nofollow' target='_new' >#{$3}</a>" )
    end
  end
  html
end

`

干杯!