Mongrel, .htaccess, cpanel, rewrite, Mongrel::HttpParserError

I just installed my RoR application on my ISP's server.

This is a Cpanel environment and it creates a .htaccess file:

  RewriteEngine on

  RewriteCond %{HTTP_HOST} ^xyz.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.xyz.com$
  RewriteRule ^(.*)$ "http\:\/\/127\.0\.0\.1\:12001\/$1" [P,L]

in a public_html directory. (I changed my domain name in the text above
to xyz because we are not ready to do a product launch.)

The objective, I guess, of the .htaccess file in public_html is to
rewrite (i.e. redirect) www.xyz.com to 127.0.0.1:12001

When I access my website using
  www.xyz.com:12001
everything works fine. All my pictures show up, all links work, there
are no errors in production.log and the only error I see in mongrel.log
is

  Rails signals registered. HUP => reload (without restart). It might
not
  work well.

But that message only occurs during mongrel startup.

When I attempt to access my website via
  www.xyz.com
or
  xyz.com
I get a ton of mongrel errors complaining that

  HTTP parse error, malformed request (127.0.0.1):
  #<Mongrel::HttpParserError: Invalid HTTP format, parsing fails.>

  REQUEST DATA: "GET /images/Logo 010 - 200x48 - no
background.png?1289857922 HTTP/1.1\r\nHost:
127.0.0.1:12001\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0;
en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729;
.NET4.0E)\r\nAccept:
image/png,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language:
en-us,en;q=0.5\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\nReferer:
http://www.xyz.com/\r\nCookie:
_XYZ_session=BAh7BjoPc2Vzc2lvbl9pZCIlOTZlZTVmMjUxOGE3YmIwMGEzNTQ5M2QzZDYwMDI4NmE%3D--fbeb1fb7b16f82da9485523bb84ad3b60fd8d6dc\r\nMax-Forwards:
10\r\nX-Forwarded-For: 98.245.93.82\r\nX-Forwarded-Host:
www.xyz.com\r\nX-Forwarded-Server: xyz.com\r\n\r\n"

OMG. Do you actually have spaces in your image file names?

OMG. Do you actually have spaces in your image file names?

--
Hassan Schroeder ------------------------ hassan.schroeder@gmail.com
twitter: @hassan

Yes ... why not?

I have not had any troubles with spaces in file names on my Windows
development environment, Linux static web page environment, or Linux RoR
environment.

What's the issue?

You just found it -- or at least one -- apparently :slight_smile:

Spaces in file or directory names are brittle -- some programs will
handle them OK, some won't. You're far better off avoiding them.

A URL must not contain spaces, which is why browsers will silently fill in %20 to replace them whenever they encounter a badly-coded URL. Seriously, deep in the bowels of the Internet World Domination Headquarters, Tim Berners-Lee kills a kitten each time you put spaces in a URL.

Walter

The issue isn't really the filenames directly, but that URLs cannot contain spaces. Depending on where the space occurs, it should be encoded either as %20 (in the path portion) or as + (in the query-string portion). In my experience, even using + rather than %20 in path components (such as your filename) will work properly even though it might not be strictly correct per some RFC.

-Rob

Rob Biedenharn
Rob@AgileConsultingLLC.com http://AgileConsultingLLC.com/
rab@GaslightSoftware.com http://GaslightSoftware.com/

What's the issue?

The issue isn't really the filenames directly, but that URLs cannot
contain spaces.

[snip]

-Rob

Rob and Hassan and all ...

I don't believe it ... but you were right.

Replacing the spaces with hyphens every and ... everything works.

Wow.

I thought I was chasing a wild good but instead I found the goose that
lays the HTML eggs.

Thanks!!!!

Ralph