[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