You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Aaron J Mackey <aj...@virginia.edu> on 2002/05/13 20:11:55 UTC

automatic redirect to https

Can anyone see something wrong with this, or suggest a better mechanism:

    unless ( $ENV{HTTPS} ) {
        # bounce request to secure port
        my $uri = $r->parsed_uri();
        $uri->scheme('https');
        $r->header_out(Location => $uri->unparse());
        return REDIRECT;
    }

This doesn't seem to work for me; the browser acts as if it's in an
eternal redirection loop.  And the server's error log says that a child
segfaulted in the process.  The $uri->unparse yields a string like
"https:/mydirectory" when I access "http://myserver.org/mydirectory".  Do
I need to rebuild the entire URI manually?

Thanks,

-Aaron


Re: automatic redirect to https

Posted by Aaron J Mackey <aj...@virginia.edu>.
On Mon, 13 May 2002, Geoffrey Young wrote:

> hmm, that's interesting - I guess you're catching a <VirtualHost _default_> setting?  If
> so, there's probably not much you can do about it save something like
>
> my $uri = Apache:URI->parse($r);
> $uri->hostname($r->headers_in->get('Host'));

That did the trick - the browser is now redirected correctly, thanks.

-Aaron


Re: automatic redirect to https

Posted by Geoffrey Young <ge...@modperlcookbook.org>.

Aaron J Mackey wrote:

> On Mon, 13 May 2002, Geoffrey Young wrote:
> 
> 
>>my $uri = Apache::URI->parse($r);
>>
> 
> Well, now $uri->unparse yields this: "null: https://_default_/mydirectory"
> 
> Which of course doesn't work in the Location field of the redirect.  I can
> munge this as I need, but I was hoping for something cleaner.


hmm, that's interesting - I guess you're catching a <VirtualHost _default_> setting?  If 
so, there's probably not much you can do about it save something like

my $uri = Apache:URI->parse($r);
$uri->hostname($r->headers_in->get('Host'));

if you can, adding a ServerName directive might make things work as well, but I suppose 
that defeats the purpose of _default_ :)

at this point, however, there may not be a more elegant solution since 
Apache::URI->parse() relies on Apache API calls for most of its information.

HTH

--Geoff





Re: automatic redirect to https

Posted by Aaron J Mackey <aj...@virginia.edu>.
On Mon, 13 May 2002, Geoffrey Young wrote:

> my $uri = Apache::URI->parse($r);

Well, now $uri->unparse yields this: "null: https://_default_/mydirectory"

Which of course doesn't work in the Location field of the redirect.  I can
munge this as I need, but I was hoping for something cleaner.

-Aaron

-- 
 Aaron J Mackey
 Pearson Laboratory
 University of Virginia
 (434) 924-2821
 amackey@virginia.edu



Re: automatic redirect to https

Posted by Geoffrey Young <ge...@modperlcookbook.org>.

Aaron J Mackey wrote:

> Can anyone see something wrong with this, or suggest a better mechanism:
> 
>     unless ( $ENV{HTTPS} ) {
>         # bounce request to secure port
>         my $uri = $r->parsed_uri();
>         $uri->scheme('https');
>         $r->header_out(Location => $uri->unparse());
>         return REDIRECT;
>     }
> 
> This doesn't seem to work for me; the browser acts as if it's in an
> eternal redirection loop.  And the server's error log says that a child
> segfaulted in the process.  The $uri->unparse yields a string like
> "https:/mydirectory" when I access "http://myserver.org/mydirectory".  Do
> I need to rebuild the entire URI manually?


no.  try this instead

my $uri = Apache::URI->parse($r);


HTH


--Geoff


Re: automatic redirect to https

Posted by Geoffrey Young <ge...@modperlcookbook.org>.

Aaron J Mackey wrote:

> Yes: simply because I want to be able to install the software at new
> sites with minimal httpd.conf twiddling (and the user has a configuration
> file in which they can switch on/off the SSL requirement).


in that case, you probably want to check $r->subprocess_env('HTTPS') instead of 
$ENV{HTTPS}, since PerlSetupEnv Off will cause $ENV{HTTPS} to be false.


--Geoff



RE: automatic redirect to https

Posted by Aaron J Mackey <aj...@virginia.edu>.
Yes: simply because I want to be able to install the software at new
sites with minimal httpd.conf twiddling (and the user has a configuration
file in which they can switch on/off the SSL requirement).

Thanks for the easier answer though - it should probably be the first
answer in the FAQ (is there a FAQ file somewhere that I could patch in the
answers to this question and send it to someone?)

-Aaron

On Mon, 13 May 2002, Christian Gilmore wrote:

> Is there a reason you don't just use a Redirect?
>
>   <VirtualHost	__default__:80>
>   Redirect		/	https://secure.server.com/
>   </VirtualHost>
>
> Regards,
> Christian
>
> -----------------
> Christian Gilmore
> Technology Leader
> GeT WW Global Applications Development
> IBM Software Group
>
>
> > -----Original Message-----
> > From: Aaron J Mackey [mailto:ajm6q@virginia.edu]
> > Sent: Monday, May 13, 2002 1:12 PM
> > To: modperl@apache.org
> > Subject: automatic redirect to https
> >
> >
> >
> > Can anyone see something wrong with this, or suggest a better
> > mechanism:
> >
> >     unless ( $ENV{HTTPS} ) {
> >         # bounce request to secure port
> >         my $uri = $r->parsed_uri();
> >         $uri->scheme('https');
> >         $r->header_out(Location => $uri->unparse());
> >         return REDIRECT;
> >     }
> >
> > This doesn't seem to work for me; the browser acts as if it's in an
> > eternal redirection loop.  And the server's error log says
> > that a child
> > segfaulted in the process.  The $uri->unparse yields a string like
> > "https:/mydirectory" when I access
> > "http://myserver.org/mydirectory".  Do
> > I need to rebuild the entire URI manually?
> >
> > Thanks,
> >
> > -Aaron
> >


RE: automatic redirect to https

Posted by Christian Gilmore <cg...@tivoli.com>.
Is there a reason you don't just use a Redirect?

  <VirtualHost	__default__:80>
  Redirect		/	https://secure.server.com/
  </VirtualHost>

Regards,
Christian

-----------------
Christian Gilmore
Technology Leader
GeT WW Global Applications Development
IBM Software Group


> -----Original Message-----
> From: Aaron J Mackey [mailto:ajm6q@virginia.edu]
> Sent: Monday, May 13, 2002 1:12 PM
> To: modperl@apache.org
> Subject: automatic redirect to https
> 
> 
> 
> Can anyone see something wrong with this, or suggest a better 
> mechanism:
> 
>     unless ( $ENV{HTTPS} ) {
>         # bounce request to secure port
>         my $uri = $r->parsed_uri();
>         $uri->scheme('https');
>         $r->header_out(Location => $uri->unparse());
>         return REDIRECT;
>     }
> 
> This doesn't seem to work for me; the browser acts as if it's in an
> eternal redirection loop.  And the server's error log says 
> that a child
> segfaulted in the process.  The $uri->unparse yields a string like
> "https:/mydirectory" when I access 
> "http://myserver.org/mydirectory".  Do
> I need to rebuild the entire URI manually?
> 
> Thanks,
> 
> -Aaron
>