page caching and lower/upper case problem

Hi guys,

I’m with a problem here, on my application, the user can define his own URI.
Like user UserA can create an uri like
UserB can create an uri like

To catch this uri, i’m using this at the end of my routes.rb

map.connect ‘*path’ , :controller => ‘project’ , :action => ‘show’

On this controller, I’m also using page cache
caches_page :show, :if => :project_exists

Well, so far, so good. But heres the problem.

If some user access the uri rails will cache the MyNiceUri.html on /public
Is some other user access rails will cache MYNICEURIL.html on /public and do on…

Well, this sucks, since to sweep this cache, i have to try a lot of upper/lower case combination to make sure
theres no cache file left on filesystem.

So, theres a way to solve this issue?
I’m using passenger, maybe i should try any configuration on apache?

Any tips will help.


Why don’t you store the uri in lowercase in the database and then translate the name to lowercase before looking it up.
Then operate all your caching etc in lowercase.

How can I do this?
:cache_path doesnt seems to work with page caching.


You could configure Apache to look for files in the cache directory with no regard for case.

You could also check the uri against your lowercase version and if they don’t match, send a 301 redirect to the lowercase uri.

Then you’re only ever caching the lowercase version and any other case gets correctly redirected to the cached version.

If you do this from early on in your project, you shouldn’t have any mixed case issues because all links etc will go to the lowercase pages.