Allow exempting domain names from rel="nofollow"
This introduces a new configuration option, $wgNoFollowDomainExceptions. By default this is an empty array; perhaps it should be null by default and initialize to something extracted from $wgServer. An appropriate value for Wikimedia would be something like: $wgNoFollowDomainExceptions = array( 'wikipedia.org', 'wiktionary.org', 'wikibooks.org', ... ); It's fairly silly that we're nofollowing links to our own sites. :)
This commit is contained in:
parent
93675d4e20
commit
fd07d0236a
3 changed files with 43 additions and 4 deletions
|
|
@ -23,6 +23,8 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
|
|||
* Added $wgNewPasswordExpiry, to specify an expiry time (in seconds) to
|
||||
temporary passwords
|
||||
* Added $wgUseTwoButtonsSearchForm to choose the Search form behavior/look
|
||||
* Added $wgNoFollowDomainExceptions to allow exempting particular domain names
|
||||
from rel="nofollow" on external links
|
||||
|
||||
=== New features in 1.15 ===
|
||||
|
||||
|
|
|
|||
|
|
@ -3084,6 +3084,19 @@ $wgNoFollowLinks = true;
|
|||
*/
|
||||
$wgNoFollowNsExceptions = array();
|
||||
|
||||
/**
|
||||
* If this is set to an array of domains, external links to these domain names
|
||||
* (or any subdomains) will not be set to rel="nofollow" regardless of the
|
||||
* value of $wgNoFollowLinks. For instance:
|
||||
*
|
||||
* $wgNoFollowDomainExceptions = array( 'en.wikipedia.org', 'wiktionary.org' );
|
||||
*
|
||||
* This would add rel="nofollow" to links to de.wikipedia.org, but not
|
||||
* en.wikipedia.org, wiktionary.org, en.wiktionary.org, us.en.wikipedia.org,
|
||||
* etc.
|
||||
*/
|
||||
$wgNoFollowDomainExceptions = array();
|
||||
|
||||
/**
|
||||
* Default robot policy. The default policy is to encourage indexing and fol-
|
||||
* lowing of links. It may be overridden on a per-namespace and/or per-page
|
||||
|
|
|
|||
|
|
@ -1130,7 +1130,7 @@ class Parser
|
|||
if ( $text === false ) {
|
||||
# Not an image, make a link
|
||||
$text = $sk->makeExternalLink( $url, $wgContLang->markNoConversion($url), true, 'free',
|
||||
$this->getExternalLinkAttribs() );
|
||||
$this->getExternalLinkAttribs( $url ) );
|
||||
# Register it in the output object...
|
||||
# Replace unnecessary URL escape codes with their equivalent characters
|
||||
$pasteurized = self::replaceUnusualEscapes( $url );
|
||||
|
|
@ -1410,8 +1410,8 @@ class Parser
|
|||
# This means that users can paste URLs directly into the text
|
||||
# Funny characters like ö aren't valid in URLs anyway
|
||||
# This was changed in August 2004
|
||||
$s .= $sk->makeExternalLink( $url, $text, false, $linktype, $this->getExternalLinkAttribs() )
|
||||
. $dtrail . $trail;
|
||||
$s .= $sk->makeExternalLink( $url, $text, false, $linktype,
|
||||
$this->getExternalLinkAttribs( $url ) ) . $dtrail . $trail;
|
||||
|
||||
# Register link in the output object.
|
||||
# Replace unnecessary URL escape codes with the referenced character
|
||||
|
|
@ -1424,12 +1424,36 @@ class Parser
|
|||
return $s;
|
||||
}
|
||||
|
||||
function getExternalLinkAttribs() {
|
||||
/**
|
||||
* Get an associative array of additional HTML attributes appropriate for a
|
||||
* particular external link. This currently may include rel => nofollow
|
||||
* (depending on configuration, namespace, and the URL's domain) and/or a
|
||||
* target attribute (depending on configuration).
|
||||
*
|
||||
* @param string $url Optional URL, to extract the domain from for rel =>
|
||||
* nofollow if appropriate
|
||||
* @return array Associative array of HTML attributes
|
||||
*/
|
||||
function getExternalLinkAttribs( $url = false ) {
|
||||
$attribs = array();
|
||||
global $wgNoFollowLinks, $wgNoFollowNsExceptions;
|
||||
$ns = $this->mTitle->getNamespace();
|
||||
if( $wgNoFollowLinks && !in_array($ns, $wgNoFollowNsExceptions) ) {
|
||||
$attribs['rel'] = 'nofollow';
|
||||
|
||||
global $wgNoFollowDomainExceptions;
|
||||
if ( $wgNoFollowDomainExceptions ) {
|
||||
$bits = wfParseUrl( $url );
|
||||
if ( is_array( $bits ) && isset( $bits['host'] ) ) {
|
||||
foreach ( $wgNoFollowDomainExceptions as $domain ) {
|
||||
if( substr( $bits['host'], -strlen( $domain ) )
|
||||
== $domain ) {
|
||||
unset( $attribs['rel'] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( $this->mOptions->getExternalLinkTarget() ) {
|
||||
$attribs['target'] = $this->mOptions->getExternalLinkTarget();
|
||||
|
|
|
|||
Loading…
Reference in a new issue