У меня есть проект 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, потому что, когда я захожу в / signin /, он работает!
Страница 404 на моем локальном хосте
Request URL: http://127.0.0.1:8000/test
На сервере
Request URL: http://xyz.com,%20xyz.com/test
По какой-то причине он добавляет [запятую] [пробел] к URL-адресу и перенаправляет его.
Домашняя страница работает без проблем
2 ответа
Проблема отслеживается в следующем тикете:
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, а затем ваш веб-сервер также выполняет проксирование, заголовок будет содержать список (через запятую) прокси-адресов. Используя это промежуточное программное обеспечение, он удаляет все прокси-адреса, кроме одного, в заголовках.
Возможно, это не ответ, так как я работаю с вами над одним приложением, я его исправил.
Это как-то связано с перенаправлением nginx на apache, у нас был proxy_set_header Host $host;
, и когда я отключил его, перенаправление работало без ошибок.
Похожие вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.