У меня есть сервер (сам на субдомене) с подстановочным знаком 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's.
Я нашел лучший способ, чем использование переписей. Вместо этого я использовал 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 путь (и querystring); ваше правило перезаписи выглядит так, как будто вы пытаетесь переписать в папку на диске.
Вы не можете "переписать" хост, но вы можете работать с двумя именами хостов с одним и тем же физическим отображением файлов (и бэкэндами fastcgi и ...); например, вы можете скопировать настройку server.document-root
из другого vhost, или просто сделать так, чтобы другие условные имена vhost совпадали с обоими именами хостов.
Если у вас есть "catch-all" блоков vhost по умолчанию, имейте в виду, что для каждой опции конфига последняя активная установка блока перезаписывает все остальные (используйте опцию -p
, чтобы увидеть внутренний порядок после оценки +=
и т.д.), так что начните с vhost(ов) по умолчанию.
Только для записи: "релевантный" конфиг включает в себя, по крайней мере, части для обоих vhosts, а не только вторую :)
.