2016-12-26 11 views
1

私はCherryPy webappを持っています。典型的には、メインアプリケーションのような実装されている:Cherrypy URLが不明なアプリケーションのマウントパス

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

しかし、そのようなnginxのようなリバースプロキシの背後に動作させるために、ユーザが選択したどのような経路に、他の場所にマウントできるようにする必要があります。

マウントは、ユーザが選択した何もすることができ
mount = '/my_application' 
cherrypy.tree.mount(root, 
        mount, 
        root.conf 
        ) 

問題は、リンクが壊れてしまうことです。

raise cherrypy.HTTPRedirect("/news") 

もう機能しません。 address:port/my_application/newsにリダイレクトする必要があるときは、address:port/newsにリダイレクトされます。

私が通過し、アプリケーションのパスを付加URLごとに条件を作成することができます。

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

しかし、これを行うには良い方法がなければなりません。私はリクエストディスパッチングを見てきましたが、すぐに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

関連する問題