0

我的 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

谁能告诉我我做错了什么?

干杯,

克里斯

4

2 回答 2

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
于 2009-12-29T23:41:58.617 回答
-1

/studio您的 Django 实例对 URL 的部分一无所知,因为它是在 WSGI 中处理的。您必须在模板中手动添加它,或者更好的是,在 urls.py 中添加:

在 settings.py 中:

BASE_URL = '/studio'

在 urls.py 中:

r('^%s/admin/' % settings.BASE_URL, include(admin.site.urls)), ...

然后您的 url 反转将按预期工作。您的管理链接可以工作,因为一旦您进入管理界面,所有链接都是相对的。

于 2009-12-25T10:17:07.630 回答