Я пытался продублировать вашу проблему, но она работает. Ниже мое взаимодействие. (Обратите внимание, что я использую IP-адрес 127.0.0.1:5984
, чтобы избежать проблем с vhost / rewrite, затем я получаю доступ к «производственному» сайту через localhost:5984
.
Есть ошибка Похоже, что параметры запроса добавляются к перезаписи, заканчивающейся на "..". Вместо записи в ../?key=val
он записывает в ..?key=val
, который CouchDB не анализирует.
Я не думаю, что нужно запрашивать URL базы данных с параметрами. Таким образом, один из обходных путей - всегда следить за тем, чтобы вы никогда этого не делали. (Например, если вы слепо добавляете параметры no-op ко всем запросам, чтобы упростить код, вам придется это изменить.)
Другой обходной путь - разрешить перезапись на корневой каталог CouchDB . Для этого необходимо установить /_config/httpd/secure_rewrites
в false
.
{ "from":"/api/*", "to":"../../../*" }
Теперь вы можете запросить http://localhost:5984/api/x?key=val
или http://localhost:5984/api/x/_changes?since=5
. (Вы не можете запросить корневой URL с параметрами & mdash; это все еще ошибка, но в менее посещаемом месте.)
Ниже приводится начальный сеанс терминала:
$ mkdir t
$ cd t
$ curl -XDELETE 127.0.0.1:5984/x
{"ok":true}
$ curl -XPUT 127.0.0.1:5984/x
{"ok":true}
$ curl 127.0.0.1:5984
{"couchdb":"Welcome","version":"1.0.1"}
$ echo -n _design/test > _id
$ mkdir shows
$ echo 'function() { return "hello world!\n" }' > shows/hello.js
$ cat > rewrites.json
[ { "from":"/db/*", "to":"../../*" }
, { "from":"/*" , "to":"*"}
]
$ echo '{}' > .couchapprc
$ couchapp push http://127.0.0.1:5984/x
$ curl -XPUT http://127.0.0.1:5984/_config/vhosts/localhost:5984 -d '"/x/_design/test/_rewrite"'
"/x/_design/test/_rewrite"
$ curl localhost:5984 # This is the design document.
{"_id":"_design/test","_rev":"1-e523efd669aa5375e711f8e4b764da7a","shows":{"hello":"function() { return \"hello world!\\n\" }"},"couchapp":{"signatures":{},"objects":{},"manifest":["rewrites.json","shows/","shows/hello.js"]},"rewrites":[{"to":"../../*","from":"/db/*"},{"to":"*","from":"/*"}]}
$ curl localhost:5984/_show/hello
hello world!
$ curl localhost:5984/db # This is the DB.
{"db_name":"x","doc_count":1,"doc_del_count":0,"update_seq":1,"purge_seq":0,"compact_running":false,"disk_size":4185,"instance_start_time":"1298269455135987","disk_format_version":5,"committed_update_seq":1}
$ curl localhost:5984/db/_changes
{"results":[
{"seq":1,"id":"_design/test","changes":[{"rev":"1-e523efd669aa5375e711f8e4b764da7a"}]}
],
"last_seq":1}
$ curl localhost:5984/db/_changes?since=1 # Parameters accepted!
{"results":[
],
"last_seq":1}