[ 
https://issues.apache.org/jira/browse/COUCHDB-591?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benoit Chesneau updated COUCHDB-591:
------------------------------------

    Attachment: couch_httpd_rewriter2.diff

This new patch is a complete rewrite. Now rewriting is fully handled in Erlang :

The rewriting root is the
the design doc :

/yourdb/_design/ddocname/_rewrite/....

ddocname should contain a "rewrites" member which a list of rewriting
rules. If not it will return a 404.

ex :
    {
       ....
       "rewrite": [
           {
               "from": "",
               "to": "index.html",
               "method": "GET",
               "query": {}
           }
       ]
     }

Urls are relative to ddoc :
     _show/test/...
    /_show/test/....
give same results: /somedb/ddoc/_design/_show/test/...

However it's also possible  to do :
    ../../_changes -> /somedb/_changes
and :
     ../../../somedb -> /somedb
or :
    ../../../_utils -> _utils

Rewriting can use variables. Variables in path are prefixed by ":".
For example the following rule:

    { "from": "show/:id", "to": "_show/mydoc/:id" }

will rewrite  "/mydb/_design/test/_rewrite/show/someid" to 
"/mydb/_design/test/_show/someid".

or 
    { "from": "view/:type", "to": "_list/types/by_types", query: {
"key": "type" }

will rewrite  "/mydb/_design/test/_rewrite/view/sometype" to
"/mydb/_design/test/_list/types/by_types?key=sometype".

"*" is a special variable and should be the last. It means "all remaining in 
path". Ex if for from we have  /test/*, *, * Will mean "someurl" in /test/url . 
"*" could be used in the rewritten url or query too. Ex:

{ "from": "show/*", "to": "_show/mydoc/* }

will rewrite  "/mydb/_design/test/_rewrite/show/someid" to 
"/mydb/_design/test/_show/someid".

 


> _rewrite handler
> ----------------
>
>                 Key: COUCHDB-591
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-591
>             Project: CouchDB
>          Issue Type: New Feature
>          Components: HTTP Interface
>    Affects Versions: 0.11
>            Reporter: Benoit Chesneau
>         Attachments: couch_httpd_rewriter2.diff, couchdb_rewrite.patch
>
>
> Find attached a patch providing simple url rewritig in CouchDB. You can also 
> find it in my github repo :
> http://github.com/benoitc/couchdb/tree/rewrite
> The design is very simple. Everything is managed via a simple javascript 
> function that return a path or throw 'forbidden', 'unauthorized' and "not 
> found" errors. The request object is passed to the function and then 
> depending on the path, verb or userCtx you could decide how to rewrite the 
> path. All relatives path are relative to design doc.
> The _rewriter is available at db or _design level :
> /db/_rewrite/designname/path
> or
> /db/_design/designame/_rewrite/path.
> Then _rewrite handler look in design doc if `rewrite` member exists and load 
> the function.  A snippet is avalaible here :
> http://markmail.org/message/4alwtb2zzgwu7iz7

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to