2009-07-10 117 views
3

我正在從Apache中的Django FastCgi安裝程序遷移到lighttpd中的一個。lighttpd mod_rewrite與Apache Django和FastCGI的mod_rewrite

在Apache上,我使用的是Django文檔中描述的fcgi配置。其核心部分是重寫我的所有非靜態網址被/mysite.fcgi/$1:

RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L] 

,然後進行轉發的FastCGI /mysite.fcgi所有請求:

<IfModule mod_fastcgi.c> 
    FastCGIExternalServer /opt/www/mysite.fcgi -host 127.0.0.1:8000 
</IfModule> 

的設置工作爲Django。例如,如果我去了http://www.mydomain.com/help/,並在模板中打印了{{ request.get_full_path }},結果爲/help/。生活很好,我很開心。但是,我遇到了一些問題,這些問題迫使我轉向支持更多併發連接的Web服務器,而不是Apache可以給我的。

快進到lighttpd。所有配置都很好。我重寫我的網址與mod_rewrite的:

一次url.rewrite-=( 「^(/媒體/ )$」=> 「$ 1」, 「^/favicon.ico的$」=>「/ MED/IMG /圖標/ favicon.ico的」, 「^(/。)$」=> 「/mysite.fcgi$1」, )

和已處理的FastCGI /mysite.fcgi:

fastcgi.server = (
     "/mysite.fcgi" => (
      "main" => (
       "host" => "127.0.0.1", 
       "port" => 8000, 
       "check-local" => "disable", 
      ) 
     ), 
    ) 

事情一般工作,我的Django網站運行良好。但是當我去http://www.mydomain.com/help/並在模板中打印{{ request.get_full_path }}時,結果是/mysite.fcgi/help/。這會導致一些問題。

雖然這並不會導致問題,因爲Django網站運行良好,但它在使用SSL時會造成問題。具體來說,我使用來自http://www.djangosnippets.org/snippets/240/的「Stephen Zabel - [email protected]」的sslmiddleware。這個軟件依賴於request.get_full_path,它在lighttpd下返回一個不同於Apache下的值。 request.path相同。

任何人都可以提出一個解決這個問題的方法嗎?理想情況下,我希望lighttpd mod_rewrite與Apache下的mod_rewrite具有相同的行爲。如果不行,我想要一個lighttpd FastCGI Django安裝程序,它將與我正在使用的sslmiddleware軟件包兼容。或者,我可以將sslmiddleware包更改爲與來自lighttpd的mod_rewrite重寫URL的方式兼容。

這個答案將會成爲夢幻般的30歲生日禮物!

+0

你是從trunk還是一些穩定版本使用Django?我有幾乎相同的lighttpd配置和「request.get_full_path」如你所願。 – Glader 2009-07-10 03:17:00

回答

3

您是否嘗試在settings.py中將「FORCE_SCRIPT_NAME」定義爲「」並重新啓動fastcgi服務器?

FORCE_SCRIPT_NAME="" 
+1

另外,在設置URL conf之前,確保在settings.py中定義了FORCE_SCRIPT_NAME。 – shreddd 2013-08-12 22:23:06