It's better when it's simple

User Tools

Site Tools


Externallink Plugin

Compatible with DokuWiki

No compatibility info given!

plugin Add links to pages in same host, but outside wiki

Last updated on

This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.

Similar to baselink, jalbum

Tagged with links


With this plugin you can easily insert a link to pages on same server, but outside DokuWiki.


[[@/somewhere/somepage.html|And possibly some title]]

The link naming follows normal HTML hyperlink naming. If it starts with a slash, then the link is absolute. Without a slash the link is relative.

If your dokuwiki is in http://localhost:88/dokuwiki/doku.php Then links

[[@page|name]] links to http://localhost:88/dokuwiki/doku.php/page
[[@/page|name]] links to http://localhost:88/page
[[@?do=recent|name]] links to http://localhost:88/dokuwiki/doku.php/?do=recent


Search and install the plugin using the Extension Manager. Refer to Plugins on how to install plugins manually.


 * Plugin Externallink: Add links to pages in same host, but outside wiki
 * @license    GPL 2 (
 * @author     Otto Vainio <>
 * All DokuWiki plugins to extend the parser/rendering mechanism
 * need to inherit from this class
class syntax_plugin_externallink extends DokuWiki_Syntax_Plugin {
     * return some info
    function getInfo(){
        return array(
            'author' => 'Otto Vainio',
            'email'  => '',
            'date'   => '2007-02-26',
            'name'   => 'externallink',
            'desc'   => 'Inserts a link to a page outside your wiki, but on your server with a style of wikilink. Format is [[@/pagename|optional title]]',
            'url'    => '',
     * What kind of syntax are we?
    function getType(){
        return 'substition';
    // Just before build in links
    function getSort(){ return 299; }
    function connectTo($mode) {
     * Handle the match
    function handle($match, $state, $pos, Doku_Handler $handler){
        $match = substr($match,3,-2); //strip [[@ from start and ]] from end
        $match = explode("|",$match);
        return $match;
     * Create output
    function render($mode, Doku_Renderer $renderer, $data) {
        if($mode == 'xhtml'){
            $text=$this->_externallink($renderer, $data[0], $data[1]);
            $renderer->doc .= $text;
            return true;
        return false;
    function _externallink($renderer, $url, $name = NULL) {
        global $conf;
        // Just some basic cleaning
        if(substr($url,0,7) == 'http://') {
          list($foo,$url) = explode("/",substr($url,7),2);
        if(substr($url,0,5) == 'ftp://') {
          list($foo,$url) = explode("/",substr($url,6),2);
        if (!isset($name)) {
          if (substr($url,0,1)=="/") { 
            $name=$_SERVER['HTTP_HOST'] . $url;
          } elseif (substr($url,0,1)=="?") { 
            $name=$_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $url;
          } else {
            $name=$_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/" . $url;
//        $name = $renderer->_xmlEntities($renderer->_getLinkTitle($name, $url, $isImage));
        $name = $renderer->_getLinkTitle($name, $url, $isImage);
        $link['target'] = $conf['target']['wiki'];
        $link['style']  = '';
        $link['pre']    = '';
        $link['suf']    = '';
        $link['more']   = '';
        $link['class']  = $class;
        $link['url']    = $url;
        $link['name']   = $name;
        $link['title']  = $renderer->_xmlEntities($url);
        //output formatted
        return $renderer->_formatLink($link);


11.1.2006 Initial version


Is this plugin superseded by the baselink plugin?

Well in someway yes. The format is different, and baselink gives you more options. Choice is yours ;-)Otto Vainio 2006-04-05 18:51

I think, the use of _xmlEntities() is not necessary and in fact leads to problems.


[[@/someurl|This & that]]

This will always render as: This &amp; that

Why? Well - when entering such text, special characters, like ampersand or “<” and “>” are already stored as “&amp;”, “&lt;” and so on. In fact all special characters are stored in a form, which never needs any conversion. A conversion may only be necessary, when editing the text files manually without DokuWiki - but who does this?

BTW: DokuWiki itself does it correct: A link like

[[somepage|This & that]]

will render correct as: This & that

Ok. Thanks for reporting that. I have now fixed the source above and the zip package for pluginmanager. — Otto Vainio 2006-04-11 09:40
Note that the JavaScript function “svchk()” no longer exists (and is now unnecessary) in DokuWiki, and does cause JavaScript errors, so references should be removed.
todd [at] rollerorgans [dot] com 2007-02-26
Fixed. — Otto Vainio 2007-02-26 21:56

I configured my Wiki to open external links in new pages by setting the external links target to _blank using the configuration manager. So I noticed that the plugin does not use the right setting. I had to change line 93 from




And it's working like a charm now.

Bering 2009-11-13 10:31

Plugin doesn't work on Release 2012-10-13 “Adora Belle”

Url leads to Dokuwiki basedir, but not web server root dir

Fix functions arguments in externallink/syntax.php is enough to run this plugin under 2020-07-29 “Hogfather”.

function handle($match, $state, $pos, Doku_Handler $handler) {}
function render($mode, Doku_Renderer $renderer, $data) {}

rysson 2020-10-04 15:52

plugin/externallink.txt · Last modified: 2022-01-18 23:16 by Klap-in

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki