Dieter Raber: .htaccess ohne Wirkung

Hallo,

ich habe einen Apache 2 unter Linux laufen. .htaccess ist in der httpd.conf eingetragen, im Standardverzeichnis erhalte ich auch einen Prompt zur Authentifizerung. Ich habe jetzt ein Alias ausserhalb vom Root angelegt, das ich auch ueber den Browser ansprechen kann. Die .htaccess-Datei bleibt jedoch ohne Wirkung, d.h. ich kann ohne, dass User/Password abgefragt werden, auf die Seite zugreifen. Einen Fehler in der .htaccess kann ich ausschliessen, die ist beide Male gleich.
Kann mir da vielleicht jemand weiterhelfen?

Gruß,

Dieter

  1. Hallo Dieter

    Ich hatte das selbige Problem auch mal vor Jahren.

    Schau mal in deine httpd.conf nach dem Eintrag der htaccess

    meine schaut da so aus

    <Files ~ "^.ht">
        Order allow,deny
        Deny from all
    </Files>
    Vielleicht hilfts ja.

    Thomas

  2. hallo,

    du formulierst unerwartet ungenau.

    ich habe einen Apache 2 unter Linux laufen.

    Das ist zwar verständlich, sollte aber genauer benannt werden: welches Linux, welcher Apache (es gibt Unterschiede, auch wenn sie nicht die .htacces-Technik betreffen)?

    .htaccess ist in der httpd.conf eingetragen

    Wie ist das was eingetragen?

    im Standardverzeichnis erhalte ich auch einen Prompt

    Welches "Standardverzeichnis", mit welcher URL hast du deine .htacces-geschützte DocumentRoot aufzurufen versucht, geht das eventuell über einen virtuellen Host?

    Ich habe jetzt ein Alias ausserhalb vom Root angelegt

    Das bedarf einer sehr genauen Erläuterung, da hier vermutlich dein Problem liegt.

    Die .htaccess-Datei bleibt jedoch ohne Wirkung

    Möglicherweise, weil sie nicht über denselben Alias angesprochen wird. Es macht einen Unterschied, welcher Container für deinen Alias und welcher für deine .htaccess vorgesehen wurde.

    Einen Fehler in der .htaccess kann ich ausschliessen

    Du weißt aber, daß solche Aussagen hier im Forum zu den gefährlichsten gehören und aufs genaueste nachgeprüft werden wollen?

    Kann mir da vielleicht jemand weiterhelfen?

    Noch nicht wirklich, fürchte ich.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo Christoph,

      du formulierst unerwartet ungenau.

      Mea culpa, das war wohl ein Schnellschuss

      ich habe einen Apache 2 unter Linux laufen.

      Das System ist ein Clark Connect (RedHat) 2.6.9-19.cc mit Apache 2.0.52-13.cc (cc steht fuer Clark Connect)

      .htaccess ist in der httpd.conf eingetragen
      Wie ist das was eingetragen?

      AccessFileName .htaccess

      im Standardverzeichnis erhalte ich auch einen Prompt
      Welches "Standardverzeichnis", mit welcher URL hast du deine .htacces-geschützte DocumentRoot aufzurufen versucht, geht das eventuell über einen virtuellen Host?

      DocumentRoot "/var/www/html"
      Einen Prompt erhalte ich, wenn ich den Hostnamen oder die IP benutze, also direkt auf dieses Verzeichnis zugreife. Einen viruellen Host gibt es nicht, lediglich ein Alias.

      Ich habe jetzt ein Alias ausserhalb vom Root angelegt
      Das bedarf einer sehr genauen Erläuterung, da hier vermutlich dein Problem liegt.

      Unten and die httpd.conf habe ich angefuegt:
      Alias /aliasname /var/www/testarea/mein_verzeichnis
      <Directory /var/www/testarea/mein_verzeichnis>
        Options Indexes MultiViews ExecCGI
        DirectoryIndex index.php
        Order allow,deny
        Allow from all
      </Directory>

      Einen Fehler in der .htaccess kann ich ausschliessen

      Du weißt aber, daß solche Aussagen hier im Forum zu den gefährlichsten gehören und aufs genaueste nachgeprüft werden wollen?

      Ja, weiss ich (kopfmitdackelblicknachuntenricht)
      Es ist eine 1:1 Kopie jener .htaccess die im Document Root funktioniert:

      Authentification for [...]

      AuthName "Test Area"
      AuthType Basic
      AuthUserFile /var/www/testarea/mein_verzeichnis/.htusers
      Require user  foo

      Und die .htusers sieht so aus:
      foo:passwort_mit_crypt

      Gruß,

      Dieter

      1. hallo Dieter,

        Unten and die httpd.conf habe ich angefuegt:
        Alias /aliasname /var/www/testarea/mein_verzeichnis
        <Directory /var/www/testarea/mein_verzeichnis>
          Options Indexes MultiViews ExecCGI
          DirectoryIndex index.php
          Order allow,deny
          Allow from all
        </Directory>

        Das sieht korrekt aus.

        Einen Fehler in der .htaccess kann ich ausschliessen

        Nur mal so ganz nebenbei, weil du das weder bestätigt noch verneint hast: du hast natürlich eine Kopie deiner .htaccess auch in /var/www/testarea/mein_verzeichnis abgelegt? Da der Alias auf ein Verzeichnis _außerhalb_ verweist, muß das sein.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo Christoph,

          Das sieht korrekt aus.

          Dachte ich mir auch so

          Nur mal so ganz nebenbei, weil du das weder bestätigt noch verneint hast: du hast natürlich eine Kopie deiner .htaccess auch in /var/www/testarea/mein_verzeichnis abgelegt? Da der Alias auf ein Verzeichnis _außerhalb_ verweist, muß das sein.

          Ja, habe ich. Nur, um es klar zu sagen, die Rede ist hier von /var/www/testarea/mein_verzeichnis/.htaccess, die im Gegensatz zu /var/www/html/.htaccess bei gleichem Inhalt keine Wirkung zeigt.
          Mir ist aber etwas anderes entgangen. In der httpd.conf wird eine weitere Konfigurationsdatei included mit dem Inhalt
          <VirtualHost *:80>
           ServerName localhost.localdomain
           ServerAlias *.localhost.localdomain
           DocumentRoot /var/www/html
           ErrorLog /var/log/httpd/error_log
           CustomLog /var/log/httpd/access_log combined
          </VirtualHost>
          Kannst Du damit vielleicht was anfangen? Ich wuesste zwar nicht, inwiefern das mit dem Problem zu tun hat, aber mal sehen, aber vielleicht siehst du das ja anders.
          Neben dieser gibt es noch eine Anzahl includeter Konfigurationsdateien, die sind aber nur Aliases fuer den Zugriff auf verschiedene Applikationen.

          Gruß,

          Dieter

          1. hallo Dieter,

            um es klar zu sagen, die Rede ist hier von /var/www/testarea/mein_verzeichnis/.htaccess, die im Gegensatz zu /var/www/html/.htaccess bei gleichem Inhalt keine Wirkung zeigt.

            Okok, man muß ja manchmal an ganz idiotische Fehler denken, die man _nie_ begehen würde ... ;-) Und wenn der Inhalt tatsächlich so aussieht wie du ihn gepostet hast, sehe ich keinen Grund, weshalb das nicht funktionieren sollte.

            Woran man auch noch denken könnte, ist die Rechtevergabe. Wenn du beispielsweise als root deine .htaccess direkt in das andere Verzeichnis kopiert hast, kann es sein, daß sie eben root gehört - aber root ist kein Standard-Apachebenutzer. Schau mal nach, ob die .htaccess-Dateien in /var/www/html und /var/www/testarea/mein_verzeichnis demselben Benutzer und derselben Gruppe gehören, die in der httpd.conf eingetragen sind. Gegebenenfalls mit "chown" ändern, allerdings ist die Wahrscheinlichkeit, daß die Besitzverhältnisse eine Rolle spielen, eher gering.

            Ich bemühe mich grade, das Problem irgendwie nachzuvollziehen, dabei gehts mir genau andersherum: ich habe alle "AccesFileName"-Anweisungen gestrichen bzw. auskommentiert, trotzdem funktionieren die vorhandenen .htaccess-Dateien noch - mit FreeBSD/Apache 2.2.0 und WinXP/Apache 2.0.55. Sie funktionieren sogar dann noch, wenn es keine Anweisung in der Konfugurationsdatei gibt, darauf zuzugreifen. Ich kriege sie nur mit "AllowOverride" deaktiviert. Da hab ich nun auch noch was zu grübeln und nachzulesen.

            In der httpd.conf wird eine weitere Konfigurationsdatei included
            [...]
            Kannst Du damit vielleicht was anfangen?

            Ja. Streiche das mal bitte oder kommentiere es aus. Du solltest, wenn du am Herumbasteln an deiner Serverkonfiguration bist, grundsätzlich so vorgehen, daß du erstmal _alles_ streichst oder auskommentierst und erst nach und nach die Anweisungen aktivierst, die du zu brauchen meinst.

            Ich habe mir extra nochmal die Sourcen für deine Apache-Version gezogen, um nachzuschauen, was da in der "default"-Konfigurationsdatei vorgegeben werden sollte - falls dein RedHat nicht im *.rpm noch was andres festgelegt hat. Das ist ganz aufschlußreich, es wird tatsächlich ein ähnlicher virtueller Host vorformuliert, ist aber auskommetiert. Was du da hast, ist vermutlich per "default" mit genau diesen von dir zitierten Einstellungen vom *.rpm vorformuliert (distributionsspezifisch). Der Sinn ist der, daß der Admin _grundsätzlich_ mit virtuellen Hosts arbeiten soll, also auch "localhost" bereits ein virtueller Host ist. Eine ganze Reihe von Linux-Distributionen ist bei der Zusammenstellung der distributionsspezifischen Pakete so vorgegangen (SuSE seit Apache 2.0.48, die anderen seit Apache 2.0.50). Ein paar theoretsche Hinweise, die dir allerdings konkret nicht weiterhelfen werden, gibts in meinem Artikel.

            Ich wuesste zwar nicht, inwiefern das mit dem Problem zu tun hat, aber mal sehen, aber vielleicht siehst du das ja anders.

            Das sehe ich anders, ja. Vermutlich ist genau das der Grund für deine Probleme. Dieser virtuelle Host ist aktiv (und weil ich sowas vermutete, hatte ich vorhin gefragt, ob du virtuelle Hosts im Einsatz hast), und daher sind einige Vorgaben, die du bisher in der httpd.conf außerhalb des <virtHost>-Containers vorgenommen haben magst, höchstwahrscheinlich unwirksam. Um das aber sicher behaupten zu können müßte ich allerdings deine gesamte httpd.conf kennen.

            Neben dieser gibt es noch eine Anzahl includeter Konfigurationsdateien, die sind aber nur Aliases fuer den Zugriff auf verschiedene Applikationen.

            Zumindest in den Sourcen sind sie das nicht unbedingt. Kommentiere sie mal alle aus, und aktiviere sie danach Schritt für Schritt wieder. Das bedeutet zwar mehrere Server-Neustarts, aber dann weißt du wenigstens genau, welches eingebundene Konfigurationsschnipsel wofür zuständig ist.

            Sehr hilfreich ist es auch, "LoadModule info_module modules/mod_info.so" und die zugehörigen Stellen in der httpd.conf zu aktivieren. Im Browser wird dir dann unter http://servername/server-info eine sehr detaillierte Übersicht angezeigt, welche Anweisungen tatsächlich aktiviert sind (in meinem Artikel gabs dazu in der Erstfassung mal einen kurzen Hinweis, das hab ich bei der aktuellen Fassung wieder gestrichen, es wird aber beim nächsten, im Frühjahr/Sommer nächsten Jahres geplanten Update wieder mit epischer Breite vorhanden sein).

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Hallo Christoph,

              Letzendlich ist mein Problem dank deiner Hinweise geloest, wenn auch anders, als du es vielleicht beabsichtigt hattest. An einer Stelle in deinem vorhergehenden Posting hast du davon gesprochen, dass du die ganze httpd.conf sehen muesstest, an anderer Stelle von AllowOverride.
              Ich wollte eigentlich die httpd.conf fuer ein Posting vorbereiten, indem ich alles mit Sicherheit irrelevanten Bereiche wie Kommentare, Icons und all sowas entfernt habe. Als diese dann ploetzlich klitzeklein und uebersichtlich war, ist mir aufgefallen, was ich im etwas unwirtlichen vi vorher mehrfach uebersehen habe.
              AllowOverride All war nur fuer <Directory "/var/www/html"> gesetzt, ansonsten stand es auf None....
              Jetzt ist meine kleine Welt wieder in Ordnung, alles funktioniert, wie es soll.

              Vielen Dank fuer Deine Zeit und Deine Hilfe!

              Dieter

              1. Hallo Dieter,

                AllowOverride All war nur fuer <Directory "/var/www/html"> gesetzt, ansonsten stand es auf None....

                sag ich doch :-)

                Grüße aus Nürnberg
                Tobias

                1. Hallo Tobias,

                  Recht hast Du, ich habs einfach nicht geshen oder sagen wir mal, wahrhaben wollen ;-)

                  Gruß,

                  Dieter

              2. hallo,

                AllowOverride All war nur fuer <Directory "/var/www/html"> gesetzt, ansonsten stand es auf None....

                Für "AllowOverride" liest du bitte bei Gelegenheit den Abschnitt Erlaubte Anweisungen... nach. Der ist in SELFHTML 8.1.1 neu, in der 8.1 ist das sachlich nicht ganz korrekt.

                Grüße aus Berlin

                Christoph S.

                --
                Visitenkarte
                ss:| zu:) ls:& fo:) va:) sh:| rl:|
  3. Hallo Dieter,

    Ich habe jetzt ein Alias ausserhalb vom Root angelegt, das ich auch ueber den Browser ansprechen kann. Die .htaccess-Datei bleibt jedoch ohne Wirkung,

    Hast du für dieses Verzeichnis auch AllowOverride entsprechend gesetzt? Standardmäßg steht das afaik auf none, womit .htaccess-Dateien natürlich ignoriert werden.

    Grüße aus Nürnberg
    Tobias