--- /dev/null
+# Example Apache2 configuration using mod_cgi
+# adjust paths to your installation
+
+ServerName "public-inbox"
+ServerRoot "/var/www/cgi-bin"
+DocumentRoot "/var/www/cgi-bin"
+ErrorLog "/tmp/public-inbox-error.log"
+PidFile "/tmp/public-inbox.pid"
+Listen 8080
+LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
+LoadModule env_module /usr/lib/apache2/modules/mod_env.so
+LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
+LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
+LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
+TypesConfig "/dev/null"
+
+<Directory /var/www/cgi-bin>
+ Options +ExecCGI
+ AddHandler cgi-script .cgi
+
+ # we use this hack to ensure "public-inbox.cgi" doesn't show up
+ # in any of our redirects:
+ SetEnv NO_SCRIPT_NAME 1
+
+ # our public-inbox.cgi requires PATH_INFO-based URLs with minimal
+ # use of query parameters
+ DirectoryIndex public-inbox.cgi
+ RewriteEngine On
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^.* /public-inbox.cgi/$0 [L,PT]
+</Directory>
--- /dev/null
+# Example Apache2 configuration using mod_perl2
+# adjust paths to your installation
+
+ServerName "public-inbox"
+ServerRoot "/var/www/cgi-bin"
+DocumentRoot "/var/www/cgi-bin"
+ErrorLog "/tmp/public-inbox-error.log"
+PidFile "/tmp/public-inbox.pid"
+Listen 8080
+LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
+LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
+LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
+LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
+TypesConfig "/dev/null"
+
+# PerlPassEnv PATH # this is implicit
+PerlPassEnv HOME
+<Directory /var/www/cgi-bin>
+ Options +ExecCGI
+ AddHandler perl-script .cgi
+ PerlResponseHandler ModPerl::Registry
+ PerlOptions +ParseHeaders
+
+ # we use this hack to ensure "public-inbox.cgi" doesn't show up
+ # in any of our redirects:
+ PerlSetEnv NO_SCRIPT_NAME 1
+
+ # our public-inbox.cgi requires PATH_INFO-based URLs with minimal
+ # use of query parameters
+ DirectoryIndex public-inbox.cgi
+ RewriteEngine On
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^.* /public-inbox.cgi/$0 [L,PT]
+</Directory>
use PublicInbox::Config;
use URI::Escape qw(uri_escape_utf8 uri_unescape);
our $LISTNAME_RE = qr!\A/([\w\.\-]+)!;
+our $NO_SCRIPT_NAME; # for prettier redirects with mod_perl2
our $pi_config;
BEGIN {
$pi_config = PublicInbox::Config->new;
# TODO: detect and reload config as needed
+ $NO_SCRIPT_NAME = 1 if $ENV{NO_SCRIPT_NAME};
if ($ENV{MOD_PERL}) {
require CGI;
no warnings;
# so nuke it since CGI.pm functions without it.
require CGI;
delete $ENV{REQUEST_URI};
+ $ENV{SCRIPT_NAME} = '' if $NO_SCRIPT_NAME;
my $req = CGI->new;
my $ret = main($req, $req->request_method);
binmode STDOUT;