【问题标题】:Apache Django URL problemApache Django URL 问题
【发布时间】:2011-01-15 13:53:38
【问题描述】:

我允许用户在 mysite.com/go/QUERY\

上提交查询

如果查询包含“/”Apache 阻塞。

来自 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:// 工作得很好......

有什么想法吗?

【问题讨论】:

    标签: django apache url


    【解决方案1】:

    您的 httpd 正在阻止编码斜杠。

    尝试将 AllowEncodedSlashes On 添加到您的 apache 配置到 enable encoded slashes in apache (docs)

    【讨论】:

    • 不错的一个!我什至没有想过将 Apache 视为罪魁祸首。
    • 谢谢,我遇到了同样的问题。我怀疑 Apache 是原因,但我没有意识到有一个明确的设置。
    【解决方案2】:

    从 Django 文档看来,您在实现命名组 (http://docs.djangoproject.com/en/1.1/topics/http/urls/#named-groups) 时只应该使用 (?P....) 表示法。

    尝试通过删除?P 或完成语法并将组命名为(?P&lt;search-term&gt;.*) 来修复您的正则表达式

    【讨论】:

    • 抱歉,HTML 将其删除,我对其进行了编辑以显示我在 urls.py 中真正拥有的内容。正如你所指出的那样。
    【解决方案3】:

    看起来您可能需要在传递 URL 之前对其进行解码。您可以使用urllib.unquote 来执行此操作。

    >>> import urllib
    >>> urllib.unquote("""http%3A%2F%2F""")
    'http://'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-05
      • 2013-09-21
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2011-02-18
      相关资源
      最近更新 更多