URL запроса Django становится странным - PullRequest
0 голосов
/ 29 августа 2011

У меня на локальном хосте запущен проект django, и он работает очень хорошо, однако, когда я загрузил его на реальный сервер, с URL появилась некоторая проблема.это происходит каждый раз, когда HttpResponseRedirect или любое перенаправление вызывается на

странице моего локального хоста

http://127.0.0.1:8000/signin

, в то время как на сервере оно становится

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

в firebug я вижу

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

Я верю, что это происходит потому, что urls.py имеет ^ signin / $ ^ и APPEND_SLASH = True в settings.py, потому что когда я захожу / вход / он работает!


404 страницы на моем локальном хосте

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

на сервере

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

по какой-то причине он добавляет [запятая] [пробел] на URL и перенаправляет его.


домашняя страница работает без проблем

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Проблема отслеживается в следующем билете: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, а затем ваш веб-сервер такжеПрокси, заголовок будет содержать список (через запятую) прокси-адресов.Используя это промежуточное ПО, он удалит все, кроме одного из прокси-адресов в заголовках.

1 голос
/ 29 августа 2011

Это может быть не ответ, так как я работаю с вами над тем же приложением, я исправил его.

Это как-то связано с перенаправлением nginx в apache, у нас было proxy_set_header Host $host;, и когда яотключил его перенаправление работало без ошибок.

...