将Django根目录重定向到管理面板

5 投票
1 回答
3124 浏览
提问于 2025-04-17 13:05

我正在尝试把Django网站的根目录重定向到Django的管理面板,基本上已经搞定了。不过,我发现如果项目的URL后面没有斜杠,页面上的链接就不会包含项目文件夹,而是试图在网站的根目录下寻找应用。

举个例子,我有一个项目叫foo,还有一个应用叫bar。如果你访问http://server/foo/(后面有斜杠),一切都正常,页面上的链接会指向http://server/foo/bar。但是,如果你访问http://server/foo,生成的链接就会指向http://server/bar,这就会出现404错误。

如果我把WSGIScriptAlias设置为指向/foo/而不是/foo,那么当我访问/foo时也会出现404错误。我尝试在Apache的配置中用Redirect强制加上斜杠,但结果却产生了递归重定向(http://server/foo//////...)。我还没有尝试使用.htaccess文件,但我怀疑可能会出现同样的问题。

我在urls.py中也尝试了同样的做法:

url(r'^$', redirect_to, {'url': '/'}), # goes to server root http://server/
url(r'^$', redirect_to, {'url': 'foo/'}), # goes to http://server/foo/foo
url(r'^$', redirect_to, {'url': '/foo/'}), # infinite redirect

我还尝试简单地在所有Django的URL后面加上斜杠,如下所示:

url(r'^(.*)/', include(admin.site.urls))

但是这在项目根目录下根本无法匹配任何东西(不过如果你导航到应用,似乎是可以正常工作的)。

我使用的是Apache 2.2和mod_wsgi,这里是我的配置:

Alias /static "C:/DJANGO~1/apps/django/django/contrib"

<Directory 'C:/DJANGO~1/apps/django/django/contrib'>
  Order allow,deny
  Allow from all
</Directory>

WSGIScriptAlias /foo "C:/Djangostack/apps/django/scripts/django.wsgi"

<Directory 'C:/Djangostack/apps/django/scripts'>
  Order allow,deny
  Allow from all
</Directory>

这是大部分正常工作的urls.py

urlpatterns = patterns('',
  url(r'^', include(admin.site.urls)),
)

我确保APPEND_SLASH设置为True,但在项目根目录下似乎不起作用。

1 个回答

1

试着在你的 settings.py 文件里把 APPEND_SLASH 设置为 True。我之前也遇到过类似的问题,这样设置后就解决了。这个选项默认应该是 True,但我还是需要手动设置一下。

撰写回答