Tron: mehrere <Files>-Direktiven in einer .htaccess-Datei

Hallo,

ich möchte mehrere <Files>-Direktiven in einer .htaccess-Datei anwenden.

Ich habe mehrere Dateien, die mit "sr-" anfangen und mit ".php" enden. Diese sollen grundsätzlich alle durch die Benutzergruppe "admins" geöffnet werden können.

Nun gibt es noch drei spezielle Dateien ("sr-dvds.php", "sr-cds.php" und "sr-spiele.php"), die ZUSÄTZLICH zu den "admins" noch durch die Gruppe "friends" geöffnet werden können sollen.

Folgendes Konstrukt funktioniert allerdings nicht so ganz:

<Files ~ "^sr-(dvds|cds|spiele).php$">
    AuthType Basic
    AuthName 'privater Bereich'
    AuthUserFile /home/www/web123/html/ht/.htuser
    AuthGroupFile /home/www/web123/html/ht/.htgroup
    Require group friends
</Files>

<Files ~ "^sr-*.php$">
    AuthType Basic
    AuthName 'Administrations-Bereich'
    AuthUserFile /home/www/web123/html/ht/.htuser
    AuthGroupFile /home/www/web123/html/ht/.htgroup
    Require group admins
</Files>

Werden <Files>-Direktiven einfach sequentiell abgearbeitet oder gibts da andere Einschränkungen?

Vielen Dank für die Hilfe.

  1. Hallo!

    <Files ~ "^sr-*.php$">

    Du meinst wohl eher:

    <Files ~ "^sr-.*\.php$">

    Werden <Files>-Direktiven einfach sequentiell abgearbeitet oder gibts da andere Einschränkungen?

    Die <Files> werden "gemerged", d.h. alles, was auf einen Request zutrifft, wird in einen großen Topf geworfen, als ob's direkt hintereinander stünde. Dann hast Du aber plötzlich widersprüchliche Angaben:

    von oben:

    require group friends

    von unten:

    require group admins

    Deswegen klappt's nicht. Die einfachste Möglichkeit, wäre hier mit Satisfy Any zu arbeiten:

    <Files ~ "^sr-(dvds|cds|spiele)\.php$">  
        AuthType Basic  
        AuthName 'privater Bereich'  
        AuthUserFile /home/www/web123/html/ht/.htuser  
        AuthGroupFile /home/www/web123/html/ht/.htgroup  
        Require group friends  
        Satisfy Any  
        Order Deny,Allow  
        Deny from all  
    </Files>  
      
    <Files ~ "^sr-.*\.php$">  
        AuthType Basic  
        AuthName 'Administrations-Bereich'  
        AuthUserFile /home/www/web123/html/ht/.htuser  
        AuthGroupFile /home/www/web123/html/ht/.htgroup  
        Require group admins  
    </Files>
    

    (Ungetestet, sollte aber funktionieren.)

    Viele Grüße,
    Christian

    1. Hi,

      Die einfachste Möglichkeit, wäre hier mit Satisfy Any zu arbeiten:

      In der Files-Direktive, die die "speziellen" Dateien umfasst, einfach beide Gruppennamen anzugeben, sollte doch genauso "funzen".

      MfG ChrisB

      1. Hallo!

        Die einfachste Möglichkeit, wäre hier mit Satisfy Any zu arbeiten:

        In der Files-Direktive, die die "speziellen" Dateien umfasst, einfach beide Gruppennamen anzugeben, sollte doch genauso "funzen".

        Ja, das funktioniert auch (hab's gerade getestet). Hätte ich aber nicht erwartet. Ich warte auf Apache 2.4, wo die ganze authz-Geschichte stark überarbeitet wurde.

        Allerdings funktioniert's nur, wenn die Reihenfolge umgedreht wird. Das gilt übrigens auch für meine Satisfy-Variante, die geht out-of-the-box auch nicht.

        Hier nochmal meine Satisfy-Variante, diesmal getestet:

        <Files ~ "^sr-.*\.php$">  
            AuthType Basic  
            AuthName 'Administrations-Bereich'  
            AuthUserFile /var/www/localhost/htdocs/authtest/.htuser  
            AuthGroupFile /var/www/localhost/htdocs/authtest/.htgroup  
            Require group admins  
        </Files>  
          
        <Files ~ "^sr-(dvds|cds|spiele)\.php$">  
            AuthType Basic  
            AuthName 'privater Bereich'  
            AuthUserFile /var/www/localhost/htdocs/authtest/.htuser  
            AuthGroupFile /var/www/localhost/htdocs/authtest/.htgroup  
            Require group friends  
            Satisfy Any  
            Order Deny,Allow  
            Deny from all  
        </Files>
        

        Hier Deine Require-Variante, auch getestet:

        <Files ~ "^sr-.*\.php$">  
            AuthType Basic  
            AuthName 'Administrations-Bereich'  
            AuthUserFile /var/www/localhost/htdocs/authtest/.htuser  
            AuthGroupFile /var/www/localhost/htdocs/authtest/.htgroup  
            Require group admins  
        </Files>  
          
        <Files ~ "^sr-(dvds|cds|spiele)\.php$">  
            AuthType Basic  
            AuthName 'privater Bereich'  
            AuthUserFile /var/www/localhost/htdocs/authtest/.htuser  
            AuthGroupFile /var/www/localhost/htdocs/authtest/.htgroup  
            Require group admins friends  
        </Files>
        

        Viele Grüße,
        Christian