web.py で REAL_SCRIPT_NAME を設定

Python, Web Add comments

Apache + mod_rewrite環境で、web.redirectメソッドを使うと、スクリプト名を含んだURLになってしまって困っていました。

たとえば、

http://example.com/blog/search

から、blogのルートディレクトリにリダイレクトさせようと、web.redict(’/')を実行すると、

http://example.com/blog/

になって欲しいのに、

http://example.com/blog/code.py/

になってしまうのです。スクリプト名を見せたくないからmod_rewriteを使っているのに、これでは意味がありません。

例によって、ググってやっと見つけたヒントがこちら。

web.redirect - web.py | Google Groups

Apacheの環境変数に、REAL_SCRIPT_NAMEを設定すればよいようです。ただ、”/path/to/site”に何を入れれば良いのか分からなかったので、さらにGoogle Groups内で検索。

Calling web.redirect(’/'), the url goes to …:8001 - web.py | Google Groups

こちらのスレッドに従って、REAL_SCRIPT_NAMEに空白を設定してみます。

import os
os.environ['REAL_SCRIPT_NAME'] = ''

すると、

http://example.com/blog/search

からのリダイレクトが、

http://example.com/

に変わりました。確かに、URLにスクリプト名は出なくなりました。ただ、リダイレクトして欲しいのは、blogディレクトリなので、少し修正。

import os
os.environ['REAL_SCRIPT_NAME'] = '/blog'

これで、望み通りの動作になりました。web.py | Google Groupsに感謝です。

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン