0

I have setup my lighttpd in a fashion which redirects all subdomains to my primary domain in following fashion * .domain.com -> domain.com. Unfortunately when i type in a subdomain such as www.domain.com it goes directly to http://domain.com/site.fcgi/ and literally breaks the page. When i exclude the subdomain it opens the page perfectly.

Following lighttpd settings are used:

$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",
    )     
}

Furthermore i have added FORCE_SCRIPT_NAME = '' to my settings.py.

I am not able to figure out where the problem is caused, there is nothing to come for in the log files either. Im a bit lost in no mans land.

JavaCake
  • 111
  • 3
  • 10

1 Answers1

1

url.rewrite-once triggers before url.redirect, and $HTTP["host"] =~ “domain\.com" matches www.domain.com too.

So it first rewrites (for example) http://www.domain.com/ internally to http://www.domain.com/domain.fcgi/ and then redirects the client to http://domain.com/domain.fcgi/. The client sends a new request which gets then rewritten to http://domain.com/domain.fcgi/domain.fcgi/ and then sent to the django app.

The solution is to make the second block match only "domain.com" and not the sub-domains, i.e. $HTTP["host"] == "domain.com" (simple comparison) or $HTTP["host"] =~ "^domain\.com" (anchored regular expression).

Even more strict regular expressions would be $HTTP["host"] =~ "\.domain\.com(:[0-9]+)?$" and $HTTP["host"] =~ "^domain\.com(:[0-9]+)?$"

Stefan
  • 819
  • 1
  • 7
  • 18
  • I tried doing either of the second blocks as you described, but the behaviour is static. I even tried to delete the socks and reload, restart to be sure its not "old" data. Is there more i should do? – JavaCake Mar 14 '14 at 12:04
  • Looking at the `access.log` i see that when i go through a subdomain it attempts to acccess everything through the `site.fcgi` file insteader of `/` as it does with `domain.com`. – JavaCake Mar 14 '14 at 12:24
  • I have updated the config in my main question. – JavaCake Mar 14 '14 at 12:37
  • your config above uses a wrong quote. also use curl -v to test, and clear your browser cache. – Stefan Mar 14 '14 at 13:10
  • I have been clearing cache all day, but i just realised that the i had not ticked the right one off the list. But fortunately i have been using Safari aswell at the same time, and it started to show the right results. I appriciate your help! Thanks. – JavaCake Mar 14 '14 at 13:25