レンタルサーバー上にCGIとしてDjangoを動かそうとしていて、このチケットのdjango.cgiを配置し、.htaccessでmod_rewriteの設定を
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ django.cgi/$1 [QSA,L]
このような感じにして一応動いてはいたのですが、テンプレートタグから{% url %}で
r’^hoge/$’
への逆引きをしたつもりのURLが、
/django.cgi/hoge/
のようにrewrite後のスクリプト名が付いたURLになってしまっていました。
ドキュメントにはDjangoはなるべく自動的にrewrite前のURLを探すと書いてあったんですが、それが上手くいっていないようで。
で調べた所、そういう時はsettings.pyでFORCE_SCRIPT_NAMEを設定すれば良いようです。
FORCE_SCRIPT_NAME = ''
でとりあえず解決。
細かい原因はよくわかってません。
参考
Forcing the URL prefix to a particular value
URL のプレフィクス部分を特定の値にする