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

Lighttpd перезаписывает поддомены в подпапки

У меня есть сервер (сам на поддомене) с подстановочным DNS, указывающим на него. На сервере работает Lighttpd и PHP.

Мне нужны запросы на http://any-subdomain.server.example.com переписать на http://server.example.com/site/any-subdomain и обслуживаться оттуда. Он должен быть полностью прозрачным для пользователя.

Вот моя соответствующая конфигурация:

$HTTP["host"] =~ "^(.*)\.server\.example\.com$" {
    url.rewrite-once = ( "^(.*)" => "/site/%1/$1" )
}

Кажется, работает, за исключением подпапок, которые перенаправляются на subdomain.server.example.com/site/subdomain/subfolder а затем 404-е.

Я нашел способ лучше, чем использование перезаписи. Вместо этого я использовал mod_simple_vhost:

simple-vhost.server-root = "/var/www/site/"
simple-vhost.default-host = "myquick.club"
simple-vhost.document-root = "www"

Это намного проще и проще, чем в данном случае использовать mod_rewrite. Однако найти это было непросто, надеюсь, это поможет другим в будущем.

url.rewrite-once меняет URL-путь (и строка запроса); ваше правило перезаписи выглядит так, будто вы пытаетесь перезаписать его в папку на вашем диске.

Вы не можете «переписать» хост, но вы можете обрабатывать два имени хоста с одним и тем же физическим отображением файлов (и backends fastcgi и ...); например, вы можете скопировать server.document-root настройку с другого виртуального хоста, или просто сделайте другой виртуальный хост условным совпадением с обоими именами хостов.

Если у вас есть универсальные блоки vhost по умолчанию, имейте в виду, что для каждой опции конфигурации последняя настройка активного блока перезаписывает все остальные (используйте -p возможность увидеть внутренний заказ после оценки += и так далее), поэтому начните с виртуальных хостов по умолчанию.

Для справки: "соответствующий" конфиг включает как минимум части для обоих vhosts, а не только для второго :)