2012-02-15 20 views
5

我試圖將Django站點根重定向到Django管理面板,並且我主要將其啓動並運行。但是,我注意到,除非項目URL中有斜線,否則頁面上的鏈接不包含項目文件夾,而是嘗試在網站根目錄中查找應用程序。將Django根重定向到管理面板

所以,說我有一個項目foo,和一個應用bar。如果您訪問http://server/foo/(帶有斜線),則一切正常,頁面上的鏈接將轉至http://server/foo/bar。但是,如果有人訪問http://server/foo,則生成的鏈接會轉到http://server/bar,而生成404錯誤。

如果我設置了WSGIScriptAlias指向/foo/,而不是/foo,它會如果我導航到/foo給一個404錯誤。我嘗試強制重定向的Apache conf中的結尾斜槓,但最終生成遞歸重定向(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(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是主要工作:APPEND_SLASH設置爲

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

我已確認確實,但它似乎不能在根項目文件夾中工作。

+0

爲什麼'/ foo'會被重定向到'/ bar'?這個重定向在哪裏發生? – 2012-02-15 18:10:43

+0

它並不真正將'/ foo'重定向到'/ bar'--相反,頁面上生成的url會轉到'/ bar'而不是'/ foo/bar'。 – Hannele 2012-02-15 18:12:53

回答

1

嘗試在您的settings.py中將APPEND_SLASH設置爲True。我有一個類似的問題,這爲我解決了。它應該默認爲True,但我必須明確設置它。

+0

不幸的是,這並沒有幫助 - 它在任何地方工作_但是項目的根。 – Hannele 2012-02-15 18:19:46

+0

哪個'urls.py'不能用?請注意,如果網址與模式不匹配,則只會追加斜槓*不帶斜槓。 – aganders3 2012-02-15 18:26:16

+0

我用'r'^'','r'^(。*)/''和'r'^(。*)/ $''試過了,仍然沒有運氣。我懷疑這意味着配置需要在Apache或其他系統級Django環境中進行。 – Hannele 2012-02-15 19:03:14