понедельник, 8 июня 2015 г.

"Хитрый редирект" на bottle.py

На днях столкнулся с нестандартной ситуацией. Сразу оговорюсь, я не знаю обычное ли это поведение для bottle.py в принципе или это следствие неправильной настройки приложения или веб-сервера, не знаю.
Проблема была следующая, некое веб-приложение доступно внутри локальной сети и через интернет по разным адресам, но адреса эти с сервером приложения напрямую не связаны, сервер, торчащий наружу, проксирует на компьютер внутри локальной сети по определенным адресам. Для вынужденного переброса между страницами (на страницу входа пользователя, например, если вход не выполнен) использовался redirect из функционала bottle.py. При редиректие bottle.py, несмотря на указанный относительный путь, при входе из интернета клиентов перекидывало на внутренний IP адрес буквально, допустим, с domen.com должно перекинуть на domen.com/login, а кидало на 192.168.1.56/login.
Возможности у меня поправить что-либо кроме лишь одного из файлов приложения не было, что несколько осложняло задачу.


Решен чудо-квест был с помощью response.

from botttle import route, response, redirect

### Так НЕ работало, кидало на внутренний IP ###
#@route('/somepage')
#def somepage():
#   redirect('./targetpage')
###

# А вот так работает правильно
@route('/somepage')
def somepage():
  response.status = 303
  response.set_header('Location', './targetpage')
  return '"key":"val"'

@route('/targetpage')
def targetpage():
  return 'Yep! This is target page!'
При открытии somepage произойдет "правильная переадресация" по относительному пути вне зависимости от точки входа, клиенты зашедшие через интернет не поймают Location с внутренним ip-адресом :)

Как я уже писал выше, у меня был доступ только к одному файлу, я понятия не имею что в остальных файлах приложения, как оно настроено, как настроен (и какой вообще используется) веб-сервер и т.д. Вполне возможно, что bottle.py тут не при чем.

Комментариев нет:

Отправить комментарий