У меня есть сервер (сам на поддомене) с подстановочным 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, а не только для второго :)