Apache Django URL问题

时间:2010-02-11 04:05:29

标签: django apache url

我允许用户通过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://工作得很好......

有什么想法吗?

3 个答案:

答案 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://'