Назад | Перейти на главную страницу

Перенаправление с помощью lighttpd и fastcgi в приложении Django

Я настроил свой 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]+)?$" и $HTTP["host"] =~ "^domain\.com(:[0-9]+)?$"