Christian_: htaccess einzelne domains verbieten

Hallo,
ich bräuchte Eure Unterstützung.

Ich habe eine Multidomaininstallation in Drupal. Darin möchte ich einige Domains freigeben, andere noch mit einer htaccess datei schützen. Ich suche also nach einer Möglichkeit in einer zentralen htaccess Datei zu definieren welche Domains ! erreichbar sein sollen, und welche geschützt sind.

Kann ich das den Apache in einer htaccess datei sagen? Wenn ja wie?

  1. Hallo,

    wenn alle domains die gleiche documentroot haben. apache kennt die requesturi und eine menge weitere variablen. zusammen mit RewriteCond spuckt google sicher brauchbares aus.

    Gruß

    jobo

    1. Hallo,
      in drupal haben die einzelnen Domains jeweils eigene Ordner in denen die settings.php liegt. Allerdings funktioniert es nicht eine htaccess in die jeweiligen Ordner zu legen. Die Nutzer kommen dennoch auf die URL.

      So war der Vorschlag aus dem Drupal Forum

      <code> Via .htacces ginge das überhaupt nur unter der Bedingung, dass es eine Auth-Möglichkeit gibt, die bedingt (anhand der Variable HTTP_HOST) erfolgt. So eine Möglichkeit ist mir selbst momentan nicht bekannt, kann es aber durchaus geben. Da wäre dann eher ein Apache-Forum der richtige Ort zum Fragen für so einen trickreichen Task. </code>

      Und nun wüsste ich gerne wie auf den drupal root in eine htaccess eingebe dass er auf einzelne urls nicht kommen soll...

      1. Hallo,

        das hat ja mit Drupal nicht viel zu tun dann, oder? Kannst du denn .htaccess überhaupt nutzen? Rewrite doch mal zum Testen erstmal alle Anfragen auf eine rewrite.php.

        Ansonsten kennt mod_rewrite wirklich alle Optionen, die du dir denken kannst. Dazu gehört natürlich auch die komplette URL inkl. RegEx-Check.

        Gruß

        jobo

        1. danke. ich denke ich habe gefunden wonach ich suche, scheitere nur an der umsetzung. in der htaccess datei könnte ich über

          <VirtualHost Adresse[:Port] [Adresse[:Port]] ...> ... </VirtualHost>
          definieren welche domains erlaubt sind

          <VirtualHost *:80>

          ServerName domain.info

          DocumentRoot /www/pfad/drupal/

          AllowOverride FileInfo

          Satisfy Any

          Order Deny,Allow

          Allow from all

          </VirtualHost>

          bitte um hilfe wie ich das richtig eintrage. ich bekomme einen 500- internal server error

          1. Hallo,

            danke. ich denke ich habe gefunden wonach ich suche

            das denke ich eher nicht. Oder hast du einen kompletten Server gemietet, den du selbst administrierst?

            in der htaccess datei könnte ich über
            <VirtualHost Adresse[:Port] [Adresse[:Port]] ...> ... </VirtualHost>
            definieren welche domains erlaubt sind

            Nein. Sehen wir doch mal in der Apache-Dokumentation nach, in welchem Kontext die Direktive VirtualHost erlaubt ist:

            Context: server config

            Nun denn. Hast du Zugriff auf die zentrale Serverkonfiguration? Wohl nicht.
            Und überleg mal logisch: Wenn der Apache schon in seinem Dateibestand nachsieht, was denn auf den Request passen könnte, dann ist er doch über die Frage, ob er den Request überhaupt bedienen will, schon längst hinweg.

            Du hast also höchstens die Möglichkeit, in einer lokalen .htaccess den Zugriff auf einzelne Verzeichnisse zu blockieren, indem du dort zum Beispiel einen 403er lieferst.

            bitte um hilfe wie ich das richtig eintrage. ich bekomme einen 500- internal server error

            Natürlich: Du hast eine Direktive in der lokalen Konfiguration, die dort nicht erlaubt ist.

            So long,
             Martin

            --
            "Hier steht, deutsche Wissenschaftler hätten es im Experiment geschafft, die Lichtgeschwindigkeit auf wenige Zentimeter pro Sekunde zu verringern." - "Toll. Steht da auch, wie sie es gemacht haben?" - "Sie haben den Lichtstrahl durch eine Behörde geleitet."
            1. alles klar. danke erstmal.

              ich selbst möchte ja noch auf die seite kommen.

              was schlägst du dann vor? directory oder vielleicht location.

              ich weis nicht genau wie ich in der htaccess datei angebe dass er einen bestimmten pfad oder alternativ eine url nur mit angabe des passwortes angeben darf.

              die htaccess datei einfach in den unterordner zu legen funktioniert leider nicht, da diese von drupal nicht beachtet wird wenn sie nicht auf root ebene liegt. also wie bekomme ich das gelöst?

              danke

              1. Hallo,

                ich selbst möchte ja noch auf die seite kommen.

                dann richte einen eingeschränkten Zugang mit HTTP-AUTH ein, dessen Benutzernamen und Passwort du nur selbst kennst - wenn's sein muss, abhängig vom REQUEST_URI.

                ich weis nicht genau wie ich in der htaccess datei angebe dass er einen bestimmten pfad oder alternativ eine url nur mit angabe des passwortes angeben darf.

                Ganz einfach: Die Direktiven in einer .htaccess gelten für das Verzeichnis, in dem diese Datei liegt, und alle untergeordneten. Natürlich nur für HTTP-Zugriffe (also nicht für PHP-Includes oder interne Weiterleitungen durch mod_rewrite).

                die htaccess datei einfach in den unterordner zu legen funktioniert leider nicht, da diese von drupal nicht beachtet wird wenn sie nicht auf root ebene liegt.

                Drupal kann hexen? Nein. Drupal kommt erst dann dazu, sich überhaupt einzumischen, wenn der Apache alle Klarheiten beseitigt hat.

                So long,
                 Martin

                --
                Paradox ist, wenn jemand eingefleischter Vegetarier ist.
                1. gut soweit.

                  denke mal directory ist das richtige um einen bestimmten pfad zu verbieten

                  bei <code>
                  <Directory /www/pfad>
                  AllowOverride FileInfo
                  Order deny,allow
                  Deny from all
                  </Directory><code/>

                  bekomme ich einen 500 internal server error. was habe ich falsch gemacht?

                  1. der post sollte ohne die tags <code> sein.sorry

                    1. nach rücksprache mit dem hoster: in der apache konfiguration kann ich nichts ändern.

                      nochmal in kurz: mehrere domains werden auf einen ordner geleitet, davon sollen einige mit einem passwortschutz vershen sein, andere öffentlich.

                      könnte ich das mit rewrite in der htaccess umsetzten?. scheint auch nach längerem lesen mir nicht schlüssig. gruße

                      1. Hallo,

                        http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html hast du ja schon.

                        Mit RewriteCond kannst du Bedinungen prüfen. http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html

                        RewriteEngine On
                        RewriteBase /
                        RewriteCond %{HTTP_HOST} !^www.askapache.com$ [NC]
                        RewriteRule ^(.*)$ http://www.askapache.com/$1 [R=301,L]

                        macht in dem Beispiel, dass im Falle dass HTTP_HOST nicht gleicht www.askapache.com ist, auf www.askapache.com umgeleitet wird und die request_uri hinten an gehangen wird. Das würde ich bei dir mal testen, ob das geht.

                        RewriteEngine On
                        RewriteBase /
                        RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
                        RewriteRule ^(.*)$ rewrite.php [R=301,L]

                        Son in etwa. Dann müssten alle Domains, die nicht www.example.com heißen, in der rewrite.php landen.

                        Wenn das klappt, kannst du die Weichen weiter präzisieren.

                        Gruß

                        jobo

                  2. Hi,

                    denke mal directory ist das richtige um einen bestimmten pfad zu verbieten

                    dann sehen wir doch mal nach:

                    Context: server config, virtual host

                    Auch die Directory-Direktive darf also nicht in der .htaccess auftauchen. Wäre ja auch widersinnig, in einer Konfigurationsdatei, die ohnehin nur für ein Directory gilt, noch spezifische Anweisungen für Directories zu geben.

                    Ciao,
                     Martin

                    --
                    Der Stress von heute ist die gute alte Zeit von morgen.
                    1. Danke Martin. Die seite kenn ich inzwischen fast auswendig. Allerdings nicht ganz einfach zu verstehen. Ich habe keinen root zugrif auf meinen Server (sahred hosting). spannend für mich ist wo ich denn dann dieses directory dingens eintrage. :)