【发布时间】:2013-01-16 05:10:36
【问题描述】:
有时,其他网站使用错误的百分比编码 URL 链接到我们的 Django 支持的网站。 Disqus.com 和 Twitter.com 确实有同样的问题,所以我们的用例没有什么特别之处:http://disqus.com/%C3A4。在此 URL 中,缺少第二个 %。有效的 URL 如下所示:http://disqus.com/%C3%A4
Django 返回一个空的错误 400(错误请求)页面。然而,我们想捕捉错误,而不是返回一个普通的非信息页面,我们希望至少向我们的用户展示我们的自定义 404 页面。甚至更好的是,我们想检查输入 URL 是否缺少 %-characters 或任何类似的东西来验证其格式。 MiddleWare/process_request 即使出现 400 错误也会被调用,所以我们确实有一个钩子来捕获错误。
我们想在我们的网站上解决这个问题。有没有最佳实践...?一个 handler400 会很棒 - 是否可以自己创建一个?
【问题讨论】:
-
为什么不简单地通过拦截错误从前端代理重定向用户?
-
如何使用不需要编码的干净 URL 来解决这个问题?
-
我不明白关于代理的想法。你能再解释一下吗? ... Pixbay 有 20 种语言版本,(例如)中文和日文所有字符都需要正确的 UR 编码。我们这边的编码工作得很好。无论如何,“干净”一词并不完全正确,因为 %-encoding 确实是处理 URL 中国际字符的正确方法。
-
到目前为止,我找到的唯一解决方案是在 Django 的处理程序“wsgi.py”中修补 WSGIRequest。问题归结为 Django 内部的 unicode 解码错误。
标签: django url encoding percent-encoding