【问题标题】:Django Request URL becomes weirdDjango 请求 URL 变得奇怪
【发布时间】:2011-11-05 22:22:17
【问题描述】:

我有一个 django 项目在我的本地主机上运行,​​它运行良好,但是当我将它上传到真实服务器时,url 开始出现一些问题。每次调用 HttpResponseRedirect 或任何重定向时都会发生这种情况

我的本地主机上的页面

http://127.0.0.1:8000/signin

在服务器上它变成

http://xyz.com,%20xyz.com/signin

在萤火虫中我看到了

GET signin 301 MOVED PERMANENTLY
GET signin http://xyz.com,%20xyz.com/signin

我相信会发生这种情况是因为 urls.py 在 settings.py 中有 ^signin/$^ 和 APPEND_SLASH = True 因为当我访问 /signin/ 时它可以工作!


我的本地主机上的 404 页面

Request URL:    http://127.0.0.1:8000/test

在服务器上

Request URL:    http://xyz.com,%20xyz.com/test

由于某种原因,它正在将 [comma][space] 添加到 url 并重定向它。


主页运行正常

【问题讨论】:

    标签: django url redirect request httpresponse


    【解决方案1】:

    在以下工单中跟踪问题:
    https://code.djangoproject.com/ticket/11877

    这与 Django 如何处理代理重定向有关。以下中间件将帮助您。

    class MultipleProxyMiddleware(object):
        FORWARDED_FOR_FIELDS = [
            'HTTP_X_FORWARDED_FOR',
            'HTTP_X_FORWARDED_HOST',
            'HTTP_X_FORWARDED_SERVER',
        ]
    
        def process_request(self, request):
            """
            Rewrites the proxy headers so that only the most
            recent proxy is used.
            """
            for field in self.FORWARDED_FOR_FIELDS:
                if field in request.META:
                    if ',' in request.META[field]:
                        parts = request.META[field].split(',')
                        request.META[field] = parts[-1].strip()
    

    例如,如果您的 Django 站点位于代理后面,该代理在 X-Forwarded-For 标头中包含代理信息,然后您的 Web 服务器也进行代理,则标头将包含一个列表(逗号分隔)代理地址。通过使用此中间件,它将去除标头中除一个代理地址之外的所有地址。

    【讨论】:

      【解决方案2】:

      这可能不是一个答案,因为我正在与您一起处理同一个应用程序,我已修复它。

      它与 nginx 到 apache 的重定向有关,我们有 proxy_set_header Host $host;,当我禁用它时,重定向工作没有错误。

      【讨论】:

      • 是这个原因,但是如果你想传递正确的头信息,请考虑在我的回答中使用中间件。
      猜你喜欢
      • 2013-12-13
      • 2021-11-21
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 2011-12-14
      • 2018-05-16
      • 2020-11-04
      • 2017-09-01
      相关资源
      最近更新 更多