Differences between revisions 1 and 2
Revision 1 as of 2010-09-14 07:06:06
Size: 1369
Editor: 182
Comment: how to serve document attachments from inside of vhosts and rewrites
Revision 2 as of 2010-09-14 07:50:13
Size: 1225
Editor: 182
Comment: fixed up a mistruth
Deletions are marked like this. Additions are marked like this.
Line 9: Line 9:
So anyway, the docs say that rewrites are relative to _design/yourname .. but I checked the source and for rewrites that start with '..' at least, they're relative to _design/yourname/_rewrite (or whatever the rewrite thing is called) so to rewrite this rewrite rule works for me so people can see the attachement: So anyway, the docs say that rewrites are relative to /dbname/_design/designname .. I expected ../ in a rewrite to return the '/db/' root, but it actually needs '../../':

How to Return a document's attachment from inside a vhost and/or redirect

When you're inside of a vhost with rewrites, people can't see the database documents, and also can't see their attachents.

This was really annoying for me as all my product documents have images.

I first tried adding the ?with_attachments (or whatever it is) in a show function, but I thought, whoa! I'm gonna load 5 images into memory (in base64 encoding no less) to just return one .. that's a bit sucky.

So anyway, the docs say that rewrites are relative to /dbname/_design/designname .. I expected ../ in a rewrite to return the '/db/' root, but it actually needs '../../':

  {
    "from":   "/products/dvrs/:doc/:attachment",
    "to":     "../../:doc/:attachment",
    "method": "GET" 
  }

I'm not sure if there are any security issues with serving attachments like this. Technically someone might be able to put anything in :doc and anything in :attachment and they'd be getting it basically from the database root. So I'm going to be putting in another rewrite rule/filter on my nginx to stop them putting '_' in the names.

It'd be neat to have a rewrite customisable rewrite function or filter option.