Redirect

在 Django App 上使用 lighttpd 和 fastcgi 進行重定向

  • March 14, 2014

我已經以一種方式設置了我的 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]+)?$"

引用自:https://serverfault.com/questions/581947