about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2014-04-30 20:24:54 +0000
committerEric Wong <e@80x24.org>2014-04-30 20:26:57 +0000
commitd444d9aebc6e401333968ec697c48fb23214a1ea (patch)
tree3f75d98092ab82d3701b58f26b3962394e957580
parentf286304f47685f6530462439b95951e2af86051f (diff)
downloadpublic-inbox-d444d9aebc6e401333968ec697c48fb23214a1ea.tar.gz
These are probably still popular configurations in some
settings, so include sample configurations to get folks
started.  These are trickier than an average CGI script
to setup because we rely on pretty URLs from PATH_INFO
and not ugly query parameters.
-rw-r--r--examples/apache2_cgi.conf32
-rw-r--r--examples/apache2_perl.conf35
-rwxr-xr-xpublic-inbox.cgi3
3 files changed, 70 insertions, 0 deletions
diff --git a/examples/apache2_cgi.conf b/examples/apache2_cgi.conf
new file mode 100644
index 00000000..455e4780
--- /dev/null
+++ b/examples/apache2_cgi.conf
@@ -0,0 +1,32 @@
+# 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>
diff --git a/examples/apache2_perl.conf b/examples/apache2_perl.conf
new file mode 100644
index 00000000..e963af6e
--- /dev/null
+++ b/examples/apache2_perl.conf
@@ -0,0 +1,35 @@
+# 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>
diff --git a/public-inbox.cgi b/public-inbox.cgi
index 56040676..3bc6eca3 100755
--- a/public-inbox.cgi
+++ b/public-inbox.cgi
@@ -15,10 +15,12 @@ use warnings;
 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;
@@ -36,6 +38,7 @@ if ($ENV{PI_PLACKUP}) {
         # 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;