我正在从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岁生日礼物!
你是从trunk还是一些稳定版本使用Django?我有几乎相同的lighttpd配置和“request.get_full_path”如你所愿。 – Glader 2009-07-10 03:17:00