将Django根目录重定向到管理面板
我正在尝试把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,但我还是需要手动设置一下。