我的django站点在Apache的配置中提供以下内容:
WSGIScriptAlias /studio /django/studio/bin/django.wsgi
我的urls.py看起来像:
urlpatterns += patterns(
'django.contrib',
(r'^admin/', include(admin.site.urls)),
(r'^accounts/login/$', 'auth.views.login'),
(r'^accounts/logout/$', 'auth.views.logout'),
)
......但是:
[<a href="{% url admin:index %}">admin</a>]
...生成指向/ admin而非/ studio / admin的链接。 奇怪的是,管理界面中的网址很好。
我正在使用:
Python 2.5.2-3
Django 1.1.1
mod_wsgi 2.5-1~lenny1
apache2 2.2.9-10+lenny6
谁能告诉我我做错了什么?
欢呼声,
克里斯
答案 0 :(得分:0)
这是Django中的一个错误,请参阅:
http://code.djangoproject.com/ticket/12464
问题是因为Apache的重写引擎由于重写而需要在虚拟主机的其他地方执行,所以设置了SCRIPT_URL环境变量。但是,当通过Apache向/ project提出请求时,PATH_INFO为空,这会导致SCRIPT_NAME被错误地设置为空字符串。
在修复此错误之前,将以下RewriteRule插入Apache配置将通过确保PATH_INFO永远不会为空来安全地解决问题。
RewriteEngine On
RewriteRule ^/project$ /project/ [R]
WSGIScriptAlias /project /django/project/bin/django.wsgi
答案 1 :(得分:-1)
您的Django实例对WSGI中处理的URL的/studio
部分一无所知。您必须手动将其添加到模板中,或者更好地在urls.py中添加:
:
BASE_URL = '/studio'
在urls.py中:
r('^%s/admin/' % settings.BASE_URL, include(admin.site.urls)), ...
然后您的网址反转将按预期工作。管理员链接有效,因为一旦进入管理界面,所有链接都是相对的。