Periods in :id causing Apache routing error

4 views
Skip to first unread message

Ian Zabel

unread,
Apr 12, 2007, 2:48:15 PM4/12/07
to Ruby on Rails: Talk
Using Rails 1.2 and FastCGI on Apache 1.3.

I'm trying to figure out why a request like this isn't making it into
my Rails app: http://www.domain.com/users/show/a.b.c

The user id is "a.b.c", and because of the periods in there, Apache is
giving this error:

File not found
Change this error message for pages not found in public/404.html

If the :id does not have the periods, it's fine, and the page is
served by Rails.

I'm not sure where the problem lies... But, here's my .htaccess
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Is this an Apache config thing, or more of a Rails routing thing?

Alex Wayne

unread,
Apr 12, 2007, 5:10:51 PM4/12/07
to rubyonra...@googlegroups.com

It's a Rails routing thing for sure. The '.' is a param separator. So
a, b and c are parsed as separate variables in the url. This allows you
to do stuff like:

/users/bob #=> :id => 'bob'
/users/bob.xml #=> :id => 'bob', :format => 'xml'

or

/blog #=> :action => 'index'
/blog.rss #=> :action => 'index', :format => 'rss'

To view the same data in different formats.

To prevent it try this in your routes:

map.foo '/users/:id', :requirements => {:id => /.*/}

--
Posted via http://www.ruby-forum.com/.

Ian Zabel

unread,
Apr 12, 2007, 5:48:50 PM4/12/07
to Ruby on Rails: Talk
Ah, that makes sense.

Thanks!

On Apr 12, 5:10 pm, Alex Wayne <rails-mailing-l...@andreas-s.net>
wrote:

Reply all
Reply to author
Forward
0 new messages