2016-12-26 8 views
1

У меня есть веб-приложение CherryPy, которое размещено пользователем. Как правило, основное приложение устанавливается как таковые:URL-адреса Cherrypy с неизвестным путем монтирования приложения

cherrypy.tree.mount(root, 
        '/', 
        root.conf 
        ) 

Однако для того, чтобы он работает за обратным прокси-сервером, такие как Nginx, она должна иметь возможность установить в другом месте, к тому, что путь, пользователь выбирает:

mount = '/my_application' 
cherrypy.tree.mount(root, 
        mount, 
        root.conf 
        ) 

Где монтирование может быть любым пользователем.

Проблема в том, что ссылки становятся сломанными.

raise cherrypy.HTTPRedirect("/news") 

Больше не работает. Он перенаправит адрес: порт/новости, когда мне нужно перенаправить адрес: port/my_application/news.

я мог бы пройти и создать условный для каждого URL, которая подставляет путь приложения:

if mount != '/': 
    url = mount + '/news' 
raise cherrypy.HTTPRedirect(url) 

Но должен быть лучший способ сделать это. Я посмотрел на Диспетчер запросов, но я не мог заставить его повторно писать URL-адреса на лету.

Каков наилучший способ справиться с этой ситуацией?

ответ

1

Вы можете использовать вспомогательную функцию cherrypy.url для генерации URL-адресов относительно script_name (/my_application).

Вы будете в конечном итоге с чем-то вроде:

raise cherrypy.HTTPRedirect(cherrypy.url('/news')) 

Ссылка на источник: cherrypy.urlhttps://github.com/cherrypy/cherrypy/blob/master/cherrypy/_helper.py#L194

+0

да, я надеялся, что я не должен был бы пройти через все мои шаблоны и JS скриптов для изменения каждый URL, но похоже, что это единственный способ. – user1220109

+2

Не позволю мне редактировать, но спасибо за указатели. Очень признателен. – user1220109

+0

Да, насколько я знаю, это единственный способ. – cyraxjoe