Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info
[ikiwiki] / doc / bugs / 404_plugin_and_lighttpd.mdwn
1 Lighttpd apparently sets REDIRECT_STATUS=200 for the server.error-handler-404 page. This breaks the [[plugins/404]] plugin which checks this variable for 404 before processing the URI. It also doesn't seem to set REDIRECT_URL.
2
3 I was able to fix my server to check the REQUEST_URI for ikiwiki.cgi and to continue processing if it was not found, passing $ENV{SEVER_NAME} . $ENV{REQUEST_URI} as the first parameter to cgi_page_from_404. However, my perl is terrible and I just made it work rather than figuring out exactly what to do to get it to work on both lighttpd and apache.
4
5 This is with lighttpd 1.4.19 on Debian.
6
7 > /cgi-bin/ikiwiki.cgi?do=goto also provides redirection in the same way,
8 > if that's any help? You might need to set the lighttpd 404 handler to
9 > that, then compose REDIRECT_URL from other variables if necessary.
10 >
11 > I originally wrote the plugin for Apache; [[weakish]] contributed the
12 > lighttpd docs and might know more about how to make it work there.
13 > --[[smcv]]
14
15 >> As I said, I got it working for me, but somebody who knows perl should probably look at it with the aim of making it work for everyone.
16 >> I considered having lighttpd construct a proper url for the 404 redirect itself, but I don't know if it can do something like that or not.
17 >> For what it's worth, here's the change I made to the module:
18
19     sub cgi ($) {
20             my $cgi=shift;
21             if ($ENV{REQUEST_URI} !~ /ikiwiki\.cgi/) {
22                     my $page = cgi_page_from_404(
23                             Encode::decode_utf8($ENV{SERVER_NAME} . $ENV{REQUEST_URI}),
24                             $config{url}, $config{usedirs});
25                     IkiWiki::Plugin::goto::cgi_goto($cgi, $page);
26             }
27     
28     #       if (exists $ENV{REDIRECT_STATUS} &&
29     #           $ENV{REDIRECT_STATUS} eq '404') {
30     #               my $page = cgi_page_from_404(
31     #                       Encode::decode_utf8($ENV{REDIRECT_URL}),
32     #                       $config{url}, $config{usedirs});
33     #               IkiWiki::Plugin::goto::cgi_goto($cgi, $page);
34     #       }
35     }