lighttpd mod_rewrite与Django和FastCGI的apache mod_rewrite

时间:2009-07-10 02:55:21

标签: django mod-rewrite fastcgi lighttpd

我正在从Apache中的Django FastCgi设置迁移到lighttpd中的设置。

在Apache上,我使用的是Django文档中描述的fcgi配置。核心部分是将我的所有非静态URL重写为/mysite.fcgi/$1:

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

然后转发/mysite.fcgi对FastCGI的所有请求:

<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:

url.rewrite-once =(             “^(/ media /。)$”=&gt; “$ 1”,             “^ / favicon.ico $”=&gt; “/med/img/favicon/favicon.ico”             “^(/。)$”=&gt; “/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 - sjzabel@gmail.com”的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岁生日!

2 个答案:

答案 0 :(得分:3)

您是否尝试在settings.py中将FORCE_SCRIPT_NAME定义为“”并重新启动fastcgi服务器?

FORCE_SCRIPT_NAME=""

答案 1 :(得分:1)

如果您想在lighttpd中修复它,请参阅http://redmine.lighttpd.net/issues/show/729

简而言之,升级到1.4.23并添加“fix-root-scriptname”=&gt; “启用”到fcgi配置。