2016-12-26 3 views
1

사용자가 호스팅하는 CherryPy 웹 응용 프로그램이 있습니다. 일반적으로 기본 응용 프로그램과 같은 장착 :알 수없는 응용 프로그램 탑재 경로가있는 Cherrypy URL

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

그러나,이 같은의 nginx 같은 역방향 프록시 뒤에 작동해야하기 위해, 그것은 사용자가 선택한 어떤 경로로, 다른 곳에 장착 할 수 있어야합니다 :

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

여기서 mount는 사용자가 선택하는 모든 항목이 될 수 있습니다.

이제 링크가 끊어지는 것이 문제입니다.

raise cherrypy.HTTPRedirect("/news") 

더 이상 작동하지 않습니다. address : port/my_application/news로 리디렉션해야 할 때 주소 : port/news로 리디렉션됩니다.

나는 통과하고 응용 프로그램 경로를 앞에 추가 각 URL에 대한 조건을 만들 수 있습니다

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

을하지만,이 작업을 수행 할 수있는 더 좋은 방법이 있어야합니다. 나는 Request Dispatching을 보았으나 나는 즉시 URL을 다시 쓸 수 없었다.

이 상황을 처리하는 가장 좋은 방법은 무엇입니까?

답변

1

도우미 함수 cherrypy.url을 사용하여 script_name (/my_application)에 관련된 URL을 생성 할 수 있습니다.

당신은 같은 것을 끝낼 것이다

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

cherrypy.url 소스에 대한 링크 : https://github.com/cherrypy/cherrypy/blob/master/cherrypy/_helper.py#L194

+0

그래 내가 수정 나의 템플릿과 JS의 모든 스크립트를 통해 갈 필요가 없습니다 것입니다 기대했다 각 URL,하지만 그게 유일한 방법 인 것처럼 보입니다. – user1220109

+2

내가 편집하게하지는 않겠지 만 포인터에 감사드립니다. 매우 감사. – user1220109

+0

예, 제가 아는 한 그것이 유일한 방법입니다. – cyraxjoe