Redirect
在 Django App 上使用 lighttpd 和 fastcgi 進行重定向
我已經以一種方式設置了我的 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
.我無法弄清楚問題出在哪裡,日誌文件中也沒有任何內容。我有點迷失在無人區。
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]+)?$"
and$HTTP["host"] =~ "^domain\.com(:[0-9]+)?$"