X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/20ba12802b3897bf48d8a7704a57e9cede2466bd..c849a9f409e8b3cd5091dd8b674670850d7bd3b9:/IkiWiki/Plugin/goto.pm diff --git a/IkiWiki/Plugin/goto.pm b/IkiWiki/Plugin/goto.pm index 03bd682b3..6b596ac8b 100644 --- a/IkiWiki/Plugin/goto.pm +++ b/IkiWiki/Plugin/goto.pm @@ -7,6 +7,7 @@ use IkiWiki 3.00; sub import { hook(type => "cgi", id => 'goto', call => \&cgi); + hook(type => "getsetup", id => 'goto', call => \&getsetup); } sub getsetup () { @@ -41,20 +42,21 @@ sub cgi_goto ($;$) { IkiWiki::loadindex(); - # If the page is internal (like a comment), see if it has a - # permalink. Comments do. - if (IkiWiki::isinternal($page) && - defined $pagestate{$page}{meta}{permalink}) { - IkiWiki::redirect($q, $pagestate{$page}{meta}{permalink}); + my $link; + if (! IkiWiki::isinternal($page)) { + $link = bestlink("", $page); + } + elsif (defined $pagestate{$page}{meta}{permalink}) { + # Can only redirect to an internal page if it has a + # permalink. + IkiWiki::redirect($q, $pagestate{$page}{meta}{permalink}); } - my $link = bestlink("", $page); - - if (! length $link) { + if (! defined $link || ! length $link) { IkiWiki::cgi_custom_failure( $q, "404 Not Found", - IkiWiki::misctemplate(gettext("missing page"), + IkiWiki::cgitemplate($q, gettext("missing page"), "

". sprintf(gettext("The page %s does not exist."), htmllink("", "", $page)). @@ -62,7 +64,7 @@ sub cgi_goto ($;$) { ) } else { - IkiWiki::redirect($q, urlto($link, undef, 1)); + IkiWiki::redirect($q, urlto($link)); } exit;