Динамично генерируя <Местоположение/> создает в Apache с помощью mod_perl

Можно использовать ShellExView для отключения дополнений контекстного меню.

0
задан 14 June 2009 в 03:26
3 ответа

Я не попробовал Ваш определенный вариант использования, но Вы могли бы хотеть экспериментировать с mod_perl и:

<Perl>
foreach (</sites/*/*/users.file>) {
    my $loc = $_;
    $loc =~ s/^\/sites(.*)\/users\.file/$1/;
    $Location{$loc} = {
        AuthType => "Basic",
        AuthName => "Secure area",
        AuthUserFile => $_,
    };
}
</Perl>

Необходимо будет все еще перезагрузить Apache каждый раз, когда Вы добавляете новый "users.file" все же. Если действительно необходимо сделать это динамично, необходимо создать PerlAuthenHandler вместо этого:

<Location /> # we need for any request to the site
    PerlAuthenHandler MyApache2::DynamicAuthUserFile
    AuthType Basic
    AuthName "Secure area"
</Location>

и a MyApache2/DynamicAuthUserFile.pm сценарий, подобный этому:

package MyApache2::DynamicAuthUserFile;

use strict;
use warnings;

use Apache::RequestRec ();
use Apache::Access ();

use Apache::Const -compile => qw(OK DECLINED);

sub handler {
    my $r = shift;
    my ($status, $password) = $r->get_basic_auth_pw;
    return $status if $status != Apache::OK;
    my $user = $r->user;

    my $file = $r->uri;
    $file =~ s|^/sites/([^/]*/[^/])*|$1/users.file|;

    if (open(P, $file)) {
        while (<P>) {
            chomp;
            next if /^#/;
            my ($name,$saved_pw) = split /:/;
            next if $user ne $name;
            if ($saved_pw ne crypt($passwd,$saved_pw)) {
                last;
            }
            return Apache::Const::OK;
        }
        close P;
    }

    return Apache::Const::DECLINED;
}

1;
1
ответ дан 4 December 2019 в 15:33
  • 1
    Спасибо за это. It' s не 100%-й ответ на мой вопрос, но it' s, вероятно, лучший ответ я доберусь, и по крайней мере это даст мне некоторый контекст для исследования этого далее. –  Luke 12 June 2009 в 00:41

Вы означали направлять Запросы HTTP согласно сайту к другому DocumentRoot, ScriptAlias и CustomLog, или Вам нужно что-то более сложное? Вы могли предоставить больше подробную информацию о своих директивах Местоположения?

Что-то стоящее попробовать могло бы быть mod_macro (http://www.coelho.net/mod_macro/)

1
ответ дан 4 December 2019 в 15:33
  • 1
    mod_macro мог бы быть чем-то, но ему все еще нужно определение для каждого местоположения (хотя it' s намного меньше). Этому также нужны перезагрузка или сервер каждый раз, когда Вы добавляете новое определение. –  Luke 11 June 2009 в 10:18

Вы уже посмотрели на использование <LocationMatch>?

Это - regex старший брат <Location>. Если существует достаточно структуры к Вашим существующим директивам затем, должно быть возможно соответствовать им единственному regex.

0
ответ дан 4 December 2019 в 15:33
  • 1
    Извините, < LocationMath/> движение не должно работать на меня. –  Luke 11 June 2009 в 10:18