使用Django App上的lighttpd和fastcgiredirect

我已经设置了我的lighttpd的方式,redirect到我的主域名的所有子域以下面的方式* .domain.com – > domain.com 。 不幸的是,当我input一个像www.domain.com这样的子域名时,它直接进入了http://domain.com/site.fcgi/并且从字面上打破了页面。 当我排除子域它打开完美的页面。

以下使用lighttpd设置:

 $HTTP["host"] =~ "\.domain\.com(:[0-9]+)?$" { url.redirect = ("^/(.*)" => "http://domain.com/$1") } $HTTP["host"] =~ "^domain\.com(:[0-9]+)?$" { server.document-root = "/var/www/servers/domain.com/awesomesite" accesslog.filename = "/var/www/logs/domain.com/access.log" server.errorlog = "/var/www/logs/domain.com/error.log" fastcgi.server = ( ".fcgi" => ( "main" => ( # Use host / port instead of socket for TCP fastcgi "bin-path" => "/var/www/servers/domain.com/awesomesite/domain.fcgi", "socket" => "/tmp/domain.sock", "check-local" => "disable", ) ), ) alias.url = ( "/static/" => "/var/www/servers/domain.com/awesomesite/static/", ) url.rewrite-once = ( "^(/static.*)$" => "$1", "^(/.*)$" => "/domain.fcgi$1", ) } 

此外,我添加了FORCE_SCRIPT_NAME = ''到我的settings.py

我无法弄清楚问题是由什么引起的,日志文件中也没有任何东西可以提供。 我在没有男人的土地有点失落。

url.rewrite-onceurl.redirect$HTTP["host"] =~ “domain\.com"之前触发url.rewrite-once ,也与www.domain.com匹配。

所以它首先重写(例如) http://www.domain.com/内部http://www.domain.com/domain.fcgi/ ,然后redirect到http://domain.com/domain.fcgi/客户端http://domain.com/domain.fcgi/ 。 客户端发送一个新的请求,然后重新写入http://domain.com/domain.fcgi/domain.fcgi/ ,然后发送到Django应用程序。

解决scheme是使第二个块只匹配“domain.com”而不是子域,即$HTTP["host"] == "domain.com" (简单比较)或$HTTP["host"] =~ "^domain\.com" (锚定正则expression式)。

更严格的正则expression式是$HTTP["host"] =~ "\.domain\.com(:[0-9]+)?$"$HTTP["host"] =~ "^domain\.com(:[0-9]+)?$"