[ 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.