[Catalyst] uri_for adding :443 to URL when HTTPS=on

Andy Grundman andy at hybridized.org
Fri Sep 14 17:32:57 GMT 2007


On Aug 28, 2007, at 6:34 AM, Charlie Garrison wrote:

> Good evening,
>
> I upgraded Catalyst-Runtime from 5.7007 to 5.7010 yesterday; and  
> that seems to be the cause of this problem. But it could have been  
> there before and it was never reported by our users.
>
> When users try to login <https://www.resultsplus.com.au/progs/>,  
> the following error is returned:
>
>     Bad Request
>     Your browser sent a request that this server could not understand.
>     Client sent malformed Host header
>     Apache/1.3.29 Server at www.resultsplus.com.au:443:8627 Port 443
>
> Catalyst is doing a redirect to the login page using:
>
>     $c->response->redirect($c->uri_for('/login'));
>
> As far as I can tell, that is when :443 is being added to the URL.
>
> The above error makes sense in the context of frontend/backend  
> apache with rewrite rules.
>
>     RewriteRule ^/login(.*)$    http://%{HTTP_HOST}:8627/progs/login 
> $1 [P]
>     RewriteRule ^/progs/(.*)$   http://%{HTTP_HOST}:8627/progs/$1 [P]
>
> I'm redirecting to and using different ports on the backend to  
> identify secure connections, and then setting ENV as:
>
>     PerlSetEnv HTTPS "on"
>
> So, assuming I'm reaching the correct conclusion (that uri_for is  
> the culprit), how do I prevent it from adding :443 to the URL?
>
> I've fixed it temporarily using a rewrite rule with hard-coded  
> value in place of %{HTTP_HOST}, but the :443 port is being added to  
> every URL created with uri_for throughout the site.
>
> I've had a look at Catalyst::uri_for sub and it seems to be getting  
> the 'base' from the URI object. But I'm running short of debug fu  
> and would appreciate some assistance at this point.

I've just checked in a fix for this bug, port 443 should no longer be  
added to base/uri.

http://dev.catalystframework.org/svnweb/Catalyst/revision/?rev=6895

-Andy



More information about the Catalyst mailing list