From e5c8bc6222712fe9f465d4ac36350fd4ea729787 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 31 Jan 2009 19:10:48 -0500 Subject: doc updates for goto branch merge --- doc/tips/dot_cgi.mdwn | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'doc/tips') diff --git a/doc/tips/dot_cgi.mdwn b/doc/tips/dot_cgi.mdwn index fbc3d8bbc..ffcbf95d4 100644 --- a/doc/tips/dot_cgi.mdwn +++ b/doc/tips/dot_cgi.mdwn @@ -26,6 +26,14 @@ configuration changes should work anywhere. Or, if you've put it in a `~/public_html`, edit `/etc/apache2/mods-available/userdir.conf`. +You may also want to enable the [[plugins/apache404]] +plugin. To make apache use it, the apache config file +will need a further modification to make it use ikiwiki's CGI +as the apache 404 handler. Something like this, with +the path adjusted to where you've put the CGI: + + ErrorDocument 404 /cgi-bin/ikiwiki.cgi + ## lighttpd Here is how to enable cgi on [lighttpd](http://www.lighttpd.net/) and -- cgit v1.2.3 From 3b83e520182a83e4ae6c61ab7b360b0eb939469f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 31 Jan 2009 19:26:36 -0500 Subject: rename apache404 -> 404 This may already work with other web servers that have copied apache's interface, and it should be easy to add support to it for web servers that use some other interface. So, make the name more general. --- IkiWiki/Plugin/404.pm | 77 +++++++++++++++++++++++++++++++++++++++++++++ IkiWiki/Plugin/apache404.pm | 77 --------------------------------------------- debian/changelog | 2 +- debian/copyright | 2 +- doc/plugins/404.mdwn | 11 +++++++ doc/plugins/apache404.mdwn | 11 ------- doc/plugins/goto.mdwn | 2 +- doc/tips/dot_cgi.mdwn | 9 +++--- t/404.t | 44 ++++++++++++++++++++++++++ t/apache404.t | 45 -------------------------- 10 files changed, 139 insertions(+), 141 deletions(-) create mode 100644 IkiWiki/Plugin/404.pm delete mode 100644 IkiWiki/Plugin/apache404.pm create mode 100644 doc/plugins/404.mdwn delete mode 100644 doc/plugins/apache404.mdwn create mode 100755 t/404.t delete mode 100755 t/apache404.t (limited to 'doc/tips') diff --git a/IkiWiki/Plugin/404.pm b/IkiWiki/Plugin/404.pm new file mode 100644 index 000000000..5550ea7d1 --- /dev/null +++ b/IkiWiki/Plugin/404.pm @@ -0,0 +1,77 @@ +#!/usr/bin/perl +# Copyright © 2009 Simon McVittie +# Licensed under the GNU GPL, version 2, or any later version published by the +# Free Software Foundation +package IkiWiki::Plugin::404; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "cgi", id => '404', call => \&cgi); + IkiWiki::loadplugin("goto"); +} + +sub getsetup () { + return + plugin => { + # not really a matter of safety, but enabling/disabling + # through a web interface is useless - it needs web + # server admin action too + safe => 0, + rebuild => 0, + } +} + +sub cgi_page_from_404 ($$$) { + my $path = shift; + my $baseurl = shift; + my $usedirs = shift; + + # fail if missing from environment or whatever + return undef unless defined $path; + return undef unless defined $baseurl; + + # with usedirs on, path is like /~fred/foo/bar/ or /~fred/foo/bar or + # /~fred/foo/bar/index.html + # with usedirs off, path is like /~fred/foo/bar.html + # baseurl is like 'http://people.example.com/~fred' + + # convert baseurl to ~fred + unless ($baseurl =~ s{^https?://[^/]+/?}{}) { + return undef; + } + + # convert path to /~fred/foo/bar + if ($usedirs) { + $path =~ s/\/*(?:index\.$config{htmlext})?$//; + } + else { + $path =~ s/\.$config{htmlext}$//; + } + + # remove /~fred/ + unless ($path =~ s{^/*\Q$baseurl\E/*}{}) { + return undef; + } + + # special case for the index + unless ($path) { + return 'index'; + } + + return $path; +} + +sub cgi ($) { + my $cgi=shift; + + if ($ENV{REDIRECT_STATUS} eq '404') { + my $page = cgi_page_from_404($ENV{REDIRECT_URL}, + $config{url}, $config{usedirs}); + IkiWiki::Plugin::goto::cgi_goto($cgi, $page); + } +} + +1; diff --git a/IkiWiki/Plugin/apache404.pm b/IkiWiki/Plugin/apache404.pm deleted file mode 100644 index e7ce70435..000000000 --- a/IkiWiki/Plugin/apache404.pm +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/perl -# Copyright © 2009 Simon McVittie -# Licensed under the GNU GPL, version 2, or any later version published by the -# Free Software Foundation -package IkiWiki::Plugin::apache404; - -use warnings; -use strict; -use IkiWiki 3.00; - -sub import { - hook(type => "cgi", id => 'apache404', call => \&cgi); - IkiWiki::loadplugin("goto"); -} - -sub getsetup () { - return - plugin => { - # not really a matter of safety, but enabling/disabling - # through a web interface is useless - it needs web - # server admin action too - safe => 0, - rebuild => 0, - } -} - -sub cgi_page_from_404 ($$$) { - my $path = shift; - my $baseurl = shift; - my $usedirs = shift; - - # fail if missing from environment or whatever - return undef unless defined $path; - return undef unless defined $baseurl; - - # with usedirs on, path is like /~fred/foo/bar/ or /~fred/foo/bar or - # /~fred/foo/bar/index.html - # with usedirs off, path is like /~fred/foo/bar.html - # baseurl is like 'http://people.example.com/~fred' - - # convert baseurl to ~fred - unless ($baseurl =~ s{^https?://[^/]+/?}{}) { - return undef; - } - - # convert path to /~fred/foo/bar - if ($usedirs) { - $path =~ s/\/*(?:index\.$config{htmlext})?$//; - } - else { - $path =~ s/\.$config{htmlext}$//; - } - - # remove /~fred/ - unless ($path =~ s{^/*\Q$baseurl\E/*}{}) { - return undef; - } - - # special case for the index - unless ($path) { - return 'index'; - } - - return $path; -} - -sub cgi ($) { - my $cgi=shift; - - if ($ENV{REDIRECT_STATUS} eq '404') { - my $page = cgi_page_from_404($ENV{REDIRECT_URL}, - $config{url}, $config{usedirs}); - IkiWiki::Plugin::goto::cgi_goto($cgi, $page); - } -} - -1; diff --git a/debian/changelog b/debian/changelog index f3927f121..be32d3abf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,6 @@ ikiwiki (3.04) UNRELEASED; urgency=low - * apache404: New plugin which lets you use the IkiWiki CGI script as + * 404: New plugin which lets you use the IkiWiki CGI script as an Apache 404 handler, to give the behaviour of various other wiki engines where visiting a nonexistent page provides you with a link to create it. (smcv) diff --git a/debian/copyright b/debian/copyright index bdfbaa573..f589b4a8f 100644 --- a/debian/copyright +++ b/debian/copyright @@ -118,7 +118,7 @@ Copyright: © 2008 Simon McVittie License: GPL-2+ -Files: apache404.pm +Files: 404.pm Copyright: © 2009 Simon McVittie License: GPL-2+ diff --git a/doc/plugins/404.mdwn b/doc/plugins/404.mdwn new file mode 100644 index 000000000..8d36279c8 --- /dev/null +++ b/doc/plugins/404.mdwn @@ -0,0 +1,11 @@ +[[!template id=plugin name=404 author="[[Simon_McVittie|smcv]]"]] +[[!tag type/useful]] + +This plugin lets you use the IkiWiki CGI script as an Apache 404 handler, +to give the behaviour of various other wiki engines where visiting a +nonexistent page provides you with a link to create it. + +To achieve this, put something like this in the wiki's Apache configuration +file: + + ErrorDocument 404 /cgi-bin/ikiwiki.cgi diff --git a/doc/plugins/apache404.mdwn b/doc/plugins/apache404.mdwn deleted file mode 100644 index bab8fb59d..000000000 --- a/doc/plugins/apache404.mdwn +++ /dev/null @@ -1,11 +0,0 @@ -[[!template id=plugin name=apache404 author="[[Simon_McVittie|smcv]]"]] -[[!tag type/useful]] - -This plugin lets you use the IkiWiki CGI script as an Apache 404 handler, -to give the behaviour of various other wiki engines where visiting a -nonexistent page provides you with a link to create it. - -To achieve this, put something like this in the wiki's Apache configuration -file: - - ErrorDocument 404 /cgi-bin/ikiwiki.cgi diff --git a/doc/plugins/goto.mdwn b/doc/plugins/goto.mdwn index 21dda16b2..9c401c5d2 100644 --- a/doc/plugins/goto.mdwn +++ b/doc/plugins/goto.mdwn @@ -2,7 +2,7 @@ [[!tag type/useful]] This plugin adds a `do=goto` mode for the IkiWiki CGI script. It's mainly -for internal use by the [[apache404]], [[comments]] and [[recentchanges]] +for internal use by the [[404]], [[comments]] and [[recentchanges]] plugins, which enable it automatically. With this plugin enabled you can link to `ikiwiki.cgi?do=goto&page=some/where` diff --git a/doc/tips/dot_cgi.mdwn b/doc/tips/dot_cgi.mdwn index ffcbf95d4..04d7a9721 100644 --- a/doc/tips/dot_cgi.mdwn +++ b/doc/tips/dot_cgi.mdwn @@ -26,11 +26,10 @@ configuration changes should work anywhere. Or, if you've put it in a `~/public_html`, edit `/etc/apache2/mods-available/userdir.conf`. -You may also want to enable the [[plugins/apache404]] -plugin. To make apache use it, the apache config file -will need a further modification to make it use ikiwiki's CGI -as the apache 404 handler. Something like this, with -the path adjusted to where you've put the CGI: +* You may also want to enable the [[plugins/404]] plugin. + To make apache use it, the apache config file will need a further + modification to make it use ikiwiki's CGI as the apache 404 handler. + Something like this, with the path adjusted to where you've put the CGI: ErrorDocument 404 /cgi-bin/ikiwiki.cgi diff --git a/t/404.t b/t/404.t new file mode 100755 index 000000000..0bb3c6063 --- /dev/null +++ b/t/404.t @@ -0,0 +1,44 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Test::More tests => 17; + +BEGIN { use_ok("IkiWiki::Plugin::404"); } + +sub cgi_page_from_404 { + return IkiWiki::Plugin::404::cgi_page_from_404(shift, shift, shift); +} + +$IkiWiki::config{htmlext} = 'html'; + +is(cgi_page_from_404('/', 'http://example.com', 1), 'index'); +is(cgi_page_from_404('/index.html', 'http://example.com', 0), 'index'); +is(cgi_page_from_404('/', 'http://example.com/', 1), 'index'); +is(cgi_page_from_404('/index.html', 'http://example.com/', 0), 'index'); + +is(cgi_page_from_404('/~user/foo/bar', 'http://example.com/~user', 1), + 'foo/bar'); +is(cgi_page_from_404('/~user/foo/bar/index.html', 'http://example.com/~user', 1), + 'foo/bar'); +is(cgi_page_from_404('/~user/foo/bar/', 'http://example.com/~user', 1), + 'foo/bar'); +is(cgi_page_from_404('/~user/foo/bar.html', 'http://example.com/~user', 0), + 'foo/bar'); + +is(cgi_page_from_404('/~user/foo/bar', 'http://example.com/~user/', 1), + 'foo/bar'); +is(cgi_page_from_404('/~user/foo/bar/index.html', 'http://example.com/~user/', 1), + 'foo/bar'); +is(cgi_page_from_404('/~user/foo/bar/', 'http://example.com/~user/', 1), + 'foo/bar'); +is(cgi_page_from_404('/~user/foo/bar.html', 'http://example.com/~user/', 0), + 'foo/bar'); + +is(cgi_page_from_404('/~user/foo', 'https://example.com/~user', 1), + 'foo'); +is(cgi_page_from_404('/~user/foo/index.html', 'https://example.com/~user', 1), + 'foo'); +is(cgi_page_from_404('/~user/foo/', 'https://example.com/~user', 1), + 'foo'); +is(cgi_page_from_404('/~user/foo.html', 'https://example.com/~user', 0), + 'foo'); diff --git a/t/apache404.t b/t/apache404.t deleted file mode 100755 index 00fc35250..000000000 --- a/t/apache404.t +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/perl -use warnings; -use strict; -use Test::More tests => 17; - -BEGIN { use_ok("IkiWiki::Plugin::apache404"); } - -sub cgi_page_from_404 { - return IkiWiki::Plugin::apache404::cgi_page_from_404(shift, shift, - shift); -} - -$IkiWiki::config{htmlext} = 'html'; - -is(cgi_page_from_404('/', 'http://example.com', 1), 'index'); -is(cgi_page_from_404('/index.html', 'http://example.com', 0), 'index'); -is(cgi_page_from_404('/', 'http://example.com/', 1), 'index'); -is(cgi_page_from_404('/index.html', 'http://example.com/', 0), 'index'); - -is(cgi_page_from_404('/~user/foo/bar', 'http://example.com/~user', 1), - 'foo/bar'); -is(cgi_page_from_404('/~user/foo/bar/index.html', 'http://example.com/~user', 1), - 'foo/bar'); -is(cgi_page_from_404('/~user/foo/bar/', 'http://example.com/~user', 1), - 'foo/bar'); -is(cgi_page_from_404('/~user/foo/bar.html', 'http://example.com/~user', 0), - 'foo/bar'); - -is(cgi_page_from_404('/~user/foo/bar', 'http://example.com/~user/', 1), - 'foo/bar'); -is(cgi_page_from_404('/~user/foo/bar/index.html', 'http://example.com/~user/', 1), - 'foo/bar'); -is(cgi_page_from_404('/~user/foo/bar/', 'http://example.com/~user/', 1), - 'foo/bar'); -is(cgi_page_from_404('/~user/foo/bar.html', 'http://example.com/~user/', 0), - 'foo/bar'); - -is(cgi_page_from_404('/~user/foo', 'https://example.com/~user', 1), - 'foo'); -is(cgi_page_from_404('/~user/foo/index.html', 'https://example.com/~user', 1), - 'foo'); -is(cgi_page_from_404('/~user/foo/', 'https://example.com/~user', 1), - 'foo'); -is(cgi_page_from_404('/~user/foo.html', 'https://example.com/~user', 0), - 'foo'); -- cgit v1.2.3 From 1de639aded7ca8d7b9ecd200351ad04a3dd08446 Mon Sep 17 00:00:00 2001 From: "http://dmarti.myopenid.com/" Date: Sun, 8 Feb 2009 13:32:12 -0500 Subject: fix typo --- doc/tips/github.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/tips') diff --git a/doc/tips/github.mdwn b/doc/tips/github.mdwn index cd1b479d1..974d572f1 100644 --- a/doc/tips/github.mdwn +++ b/doc/tips/github.mdwn @@ -1,5 +1,5 @@ Here's how to set up a static wiki or blog using ikiwiki with no hosting -feeds. Everything is hosted on github, both the git repository and the web +fees. Everything is hosted on github, both the git repository and the web site. Your laptop is used to generate and publish changes to it. This is possible because github now supports -- cgit v1.2.3 From 2d6bbdcf3f0878a870ce63a02f38eb8b95f0932e Mon Sep 17 00:00:00 2001 From: PaulePanter Date: Wed, 4 Mar 2009 05:48:18 -0500 Subject: typo and typography --- doc/tips/howto_avoid_flooding_aggregators.mdwn | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'doc/tips') diff --git a/doc/tips/howto_avoid_flooding_aggregators.mdwn b/doc/tips/howto_avoid_flooding_aggregators.mdwn index 98cef9249..e45b96689 100644 --- a/doc/tips/howto_avoid_flooding_aggregators.mdwn +++ b/doc/tips/howto_avoid_flooding_aggregators.mdwn @@ -1,27 +1,27 @@ If you have a [[blog]] that is aggregated, either on a site like Planet Debian, or just through user subscriptions, one common problem is that -changes to the guids of items in the blog can "flood" the aggregator, +changes to the guids of items in the blog can “flood” the aggregator, causing all recent blog entries to be posted to the top of it. This can happen in a lot of situations: -* Perhaps you've just switched to ikiwiki from some other blog engine and +* Perhaps you’ve just switched to ikiwiki from some other blog engine and imported your data. -* Perhaps you've turned on the `usedirs` setting, which changes all the +* Perhaps you’ve turned on the `usedirs` setting, which changes all the urls in your wiki. Even if you set up [[redirections|redirections_for_usedirs]] for the old urls, you still face the issue of flooding aggregators. -* Perhaps you've just moved stuff around in your wiki. +* Perhaps you’ve just moved stuff around in your wiki. -To avoid annoying readers in these situations, it's a good idea to remove -any existing items from your blog's news feed. That way only new items will +To avoid annoying readers in these situations, it’s a good idea to remove +any existing items from your blog’s news feed. That way only new items will show up in the aggregator. The best way to do this is to add a `feedpages` parameter to the `inline` directive for your blog, with a condition such as: feedpages=created_after(blog/posts/old_post) -Where "old_post" is the name of the last post you made to the blog before -making the change. This will limit the feed to only newer posts, while stil +Where “old_post” is the name of the last post you made to the blog before +making the change. This will limit the feed to only newer posts, while still displaying the old posts in the blog page. Alternatively, you can add the [[plugins/meta]] guid directives to pages, -- cgit v1.2.3