2009-02-05 60 views
2

我有一個Django站點設置,它使用Django管理面板,前綴爲/media/,以及在名爲/static/的目錄中的靜態站點內容。當然,管理員媒體內容存在於Django包中,網站的靜態內容與網站的Python代碼一起存儲。使用Django,設置管理內容和靜態內容路徑的正確方法是什麼?

目前,我的public_html只包含適當命名的符號鏈接到實際保存靜態內容的目錄,如下所示:

~/public_html/ 
    .htaccess 
    media -> $HOME/usr/lib/python2.4/site-packages/django/contrib/admin/media/ 
    site.fcgi 
    site -> $HOME/mysite/public/static/ 

這些都是我用我的.htaccess文件重寫規則:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ site.fcgi/$1 [QSA,L] 

然而,以這種方式使用符號鏈接感覺就像一個黑客......,而且好像我可以用在.htaccess重寫規則,以避免使用符號鏈接。 (我也想最終添加一個robots.txt文件和一個favicon文件,而不必添加和維護一堆符號鏈接。)這是一個好主意,如果是這樣,我該怎麼做?


爲了將來的參考,我最終做了類似於Rails項目的設置。我的Django項目包含public目錄,其中包括靜態網站內容,FastCGI的腳本,.htaccess文件,除其他事項外,所以看起來有點像這樣:

~/ 
    django/ 
     public/ 
      .htaccess 
      content/ 
      favicon.ico 
      [email protected] -> /symlink/to/django/admin/media/ 
      site.fcgi 
      static/ 

然後,~/public_html只是符號鏈接到~/django/public。一切正常,所以我很高興。

+0

您是否受限於在用戶帳戶下安裝並使用.htaccess而不是修改Apache的配置?如果是這樣,請在問題中說明。 – akaihola 2009-02-12 09:38:23

回答

3

我只是用

Alias /media /home/akaihola/usr/lib/python2.4/site-packages/django/contrib/admin/media/ 
Alias /static /home/akaihola/mysite/public/static/ 

,但我做一個真正的Apache配置文件而不是.htaccess和我使用mod_wsgi,但我不知道它是否有所作爲。

1

我不符號鏈接要麼...

我使用的web服務器的重寫直接指向/media/(.*)到我的媒體目錄和/admin\-media/(.*)直接把我的管理媒體。我應該強調,這些重寫發生在django fastcgi重寫之前。我會給你我的代碼,但我使用的是切諾基而不是Apache。

我不明白爲什麼你需要在你的站點根目錄「物理」表示...

+0

我也沒有,這就是爲什麼我要問如何解決它。 ;) – mipadi 2009-02-05 19:57:35

+0

我剛纔解釋過。重寫到它們的絕對(真實)位置,而不是符號鏈接和重寫符號鏈接。 – Oli 2009-02-05 19:59:51

4

符號鏈接不是「黑客」 - 它們是文件系統中合法且有用的實體。它們沒有或者比任何類型的文件都更脆弱,它們減少了冗餘,並減少了你需要做的apache配置。我不太理解你爲什麼要避開它們。符號鏈接解決方案比編寫Apache規則IMO更加優雅。

相關問題