X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/3be69a0fe49f947a9f5ef26ce0c5920c6295902d..2d1dfab20a6ed69f48c1696e00a97b44eac84062:/IkiWiki/Plugin/goto.pm?ds=sidebyside diff --git a/IkiWiki/Plugin/goto.pm b/IkiWiki/Plugin/goto.pm index 9e7a2621f..2e2dc04a1 100644 --- a/IkiWiki/Plugin/goto.pm +++ b/IkiWiki/Plugin/goto.pm @@ -32,27 +32,32 @@ sub cgi_goto ($;$) { } } + # It's possible that $page is not a valid page name; + # if so attempt to turn it into one. + if ($page !~ /$config{wiki_file_regexp}/) { + $page=titlepage($page); + } + 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}) { - redirect($q, $pagestate{$page}{meta}{permalink}); + IkiWiki::redirect($q, $pagestate{$page}{meta}{permalink}); } my $link = bestlink("", $page); if (! length $link) { - print $q->header(-status => "404 Not Found"); - print IkiWiki::misctemplate(gettext("missing page"), - "
". - sprintf(gettext("The page %s does not exist."), - htmllink("", "", $page)). - "
". - # Internet Explorer won't show custom 404 responses - # unless they're >= 512 bytes - (" " x 512)); + IkiWiki::cgi_custom_failure( + $q->header(-status => "404 Not Found"), + IkiWiki::misctemplate(gettext("missing page"), + "". + sprintf(gettext("The page %s does not exist."), + htmllink("", "", $page)). + "
") + ) } else { IkiWiki::redirect($q, urlto($link, undef, 1)); @@ -66,7 +71,7 @@ sub cgi ($) { my $do = $cgi->param('do'); if (defined $do && ($do eq 'goto' || $do eq 'commenter' || - $do eq 'recentchanged_link')) { + $do eq 'recentchanges_link')) { # goto is the preferred name for this; recentchanges_link and # commenter are for compatibility with any saved URLs cgi_goto($cgi);