我允许用户通过mysite.com/go/QUERY \
提交查询如果查询包含“/”Apache chokes。
来自urls.py:
(r'^go/(?P<querytext>.*)$', 'mysite.engine.views.go'),
尝试:
http://mysite.com/go/http%3A%2F%2F
结果:
Not Found
The requested URL /go/http:// was not found on this server.
Apache/2.2.12 (Ubuntu) Server at ...
但是,如果我输入非URL引用的值,它会起作用:
http://mysite.com/go/http://
工作得很好......
有什么想法吗?
答案 0 :(得分:3)
您的httpd阻止了编码斜杠。
尝试将AllowEncodedSlashes On
添加到您的apache配置enable encoded slashes in apache (docs)
答案 1 :(得分:2)
在Django文档中,看起来你应该在实现一个命名组(http://docs.djangoproject.com/en/1.1/topics/http/urls/#named-groups)时使用(?P....)
表示法。
尝试通过删除?P
或完成语法并命名组(?P<search-term>.*)
答案 2 :(得分:0)
在传递URL之前,您可能需要对URL进行解码。您可以使用urllib.unquote
。
>>> import urllib
>>> urllib.unquote("""http%3A%2F%2F""")
'http://'