我已经设置了我的 lighttpd,将所有子域名按照以下方式重定向到我的主域名* .domain.com
-> domain.com
。不幸的是,当我输入子域名时,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
。
我无法找出问题所在,日志文件中也没有任何信息。我有点迷失了方向。
答案1
url.rewrite-once
在 之前触发url.redirect
,并且也$HTTP["host"] =~ “domain\.com"
匹配www.domain.com
。
因此,它首先在内部重写(例如)http://www.domain.com/
到http://www.domain.com/domain.fcgi/
,然后将客户端重定向到http://domain.com/domain.fcgi/
。客户端发送一个新请求,然后将其重写为http://domain.com/domain.fcgi/domain.fcgi/
,然后发送到 django 应用程序。
解决方案是使第二个块仅匹配“domain.com”而不是子域,即$HTTP["host"] == "domain.com"
(简单比较)或$HTTP["host"] =~ "^domain\.com"
(锚定正则表达式)。
更严格的正则表达式$HTTP["host"] =~ "\.domain\.com(:[0-9]+)?$"
是$HTTP["host"] =~ "^domain\.com(:[0-9]+)?$"