Forum: Ruby on Rails Periods in :id causing Apache routing error

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C39c9fd92403d2b39c75ea3bf9d161f1?d=identicon&s=25 Ian Zabel (Guest)
on 2007-04-12 20:48
(Received via mailing list)
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?
D0cd6b10e01bacb976b3b815a9c660bc?d=identicon&s=25 Alex Wayne (squeegy)
on 2007-04-12 23:10
Ian Zabel wrote:
> 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?

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 => /.*/}
C39c9fd92403d2b39c75ea3bf9d161f1?d=identicon&s=25 Ian Zabel (Guest)
on 2007-04-12 23:53
(Received via mailing list)
Ah, that makes sense.

Thanks!

On Apr 12, 5:10 pm, Alex Wayne <rails-mailing-l...@andreas-s.net>
This topic is locked and can not be replied to.