Мы хотим получить URL-адрес и использовать его в наших vhosts в реальном времени.
Чтобы продемонстрировать свой случай, я поместил случайные числа в директиву ServerAdmin,
$ ServerAdmin = int (rand (100)). "Loko \ @ koko.com";
Как вы, возможно, знаете, это случайное число назначается только при перезапуске сервера и не меняется до следующего перезапуска.
Это то, что мы хотим: если julie.myperl.com - это запрошенный домен, то $ ServerAdmin = julie@myperl.com, то есть в реальном времени.
Надеюсь, есть решение, так как это поможет нам удалить тысячи файлов конфигурации и избавит нас от тысяч перезагрузок apache.
Спасибо, Деврим
вот такая же ситуация и решение,
http://httpd.apache.org/docs/1.3/mod/mod_vhost_alias.html
и вот почему мы задаем этот вопрос, мы создали API, в котором субдомены обозначают имена учетных записей unix, поэтому переменная часть {$ user} .domain.com должна использоваться в vhost conf. Использование переменных в контейнерах виртуального хоста Apache
Некоторое время назад я ответил на аналогичный вопрос, который может вам помочь. По сути, это немного Perl, который будет выполнять любую динамическую конфигурацию на основе URL-адреса. В этом примере он устанавливал директиву Require на основе каталога, но с небольшой корректировкой он должен делать то, что вам нужно.
Взгляните сюда: Области динамической аутентификации в Apache
Надеюсь, это поможет.
редактировать: Это должно сделать это. я использовал server_admin
напрямую управлять адресом администратора сервера, а не add_config
так как add_config
действует как <Directory>
блок, и ServerAdmin
там не разрешено.
<Perl>
use Apache2::ServerRec qw//;
use Apache2::ServerUtil qw//;
use Apache2::RequestRec qw//;
use Apache2::RequestUtil qw//;
use Apache2::Const qw/OK DECLINED/;
my $s = Apache2::ServerUtil->server;
$s->push_handlers(PerlHeaderParserHandler => sub { my($r) = @_;
if ( $r->hostname =~ m/(.*)\.([^.]+\.\w+)$/ ) {
my($subdomain,$domain) = ($1,$2);
eval{
$r->server->server_admin("$subdomain\@$domain");
};
if ( $@ ) { warn $@ }
return OK;
} else {
return DECLINED;
}
});
</Perl>