diff options
-rw-r--r-- | examples/apache2_cgi.conf | 32 | ||||
-rw-r--r-- | examples/apache2_perl.conf | 35 | ||||
-rwxr-xr-x | public-inbox.cgi | 3 |
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; |