2009-07-10 119 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