.htaccess: deny from all, aber einzelne erlauben

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • .htaccess: deny from all, aber einzelne erlauben

    Hallo,

    Mithilfe meiner .htaccess-Datei habe ich Besuchern verboten, auf .txt-Dateien zuzugreifen, und zwar so:

    <FilesMatch \.txt$>
    deny from all
    </FilesMatch>

    Jetzt hab ich das Problem, dass die Datei robots.txt natuerlich auch nicht mehr ausgegeben wird. Das ist bloed. Gibt es eine Moeglichkeit, den Zugriff auf eine bestimmte Textdatei zu erlauben, owohl der Zugriff auf diese Dateien eigentlich verboten ist?

  • #2
    meinst Du sowas?
    Code:
    order deny, allow
    allow from 12.34.56.78
    deny from all
    [Test] MySQL cli Emulator

    Comment


    • #3
      Re: .htaccess: deny from all, aber einzelne erlauben

      1. ihr sollt nicht immer alles hirnlos unter PHP posten ... *verschieb*

      Gibt es eine Moeglichkeit, den Zugriff auf eine bestimmte Textdatei zu erlauben, owohl der Zugriff auf diese Dateien eigentlich verboten ist?
      warum verbietest du nicht von anfang an den zugriff auf alle text-dateien außer robots.txt ...?

      FilesMatch erlaubt doch nicht umsonst die benutzung regulärer ausdrücke, oder?

      (und frag jetzt bitte nicht sofort "aber wie?", sondern denk erstmal selber drüber nach.)
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Comment


      • #4
        Ok, ich hab erstmal selber drueber nachgedacht und ein wenig nachgelesen und probiert. Ich glaube, es muss ungefaehr so aussehen:

        <FilesMatch /(!robots)\.txt$>
        deny from all
        </FilesMatch>

        Aber das funzt noch nicht. Im Regex ist ein Fehler, den ich nicht finde. Verschiedene Varianten (Ausrufezeichen vor die Klammer, Zirkumflex hinter das Ausrufezeichen usw.) hab ich auch schon ausprobiert.

        Waere schoen, wenn mir jemand den Fehler zeigen koennte.

        (Honestly trying to be smarter, which obligates you to try being nicer.)

        (Im PHP-Forum hab ich gepostet, weil mir die Sache mit der .htaccess nicht direkt zu LAMP, WAMP & Co. zu passen schien. Ich merke es mir aber.)

        Danke,
        Maze

        Comment


        • #5
          ich muss gestehen, ich kriegs gerade auch nicht hin mit regex ... vielleicht war das aber auch ein denkfehler :-/


          aber mit zwei direktiven für die beiden "fälle" sollte es auf jeden fall funktionieren:
          Code:
          <FilesMatch \.txt$>
          deny from all
          </FilesMatch>
          
          <Files robots.txt>
          allow from all
          </Files>
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Comment


          • #6
            Danke wahsaga, ich werde das jetzt mal einbauen. Mit Regex, das waere halt schon die sauberere Loesung, oder? Hat jemand anders die parat?

            Comment


            • #7
              Code:
              <FilesMatch (?<!robots)\.txt$>
              deny from all
              </FilesMatch>
              Die Zeit hat ihre Kinder längst gefressen

              Comment


              • #8
                @Hund: Das sieht gut aus, aber es geht leider nicht. Hab's grade ausprobiert. Es lassen sich alle .txt-Dateien oeffnen.

                (Aehm, ich gehe doch richtig in der Annahme, dass die Aenderungen in der .htaccess gleich nach dem Hochladen wirksam werden, und nicht erst z.B. nach einem Server-Neustart?)

                Weitere Vorschlaege?
                Last edited by amazed; 29-09-2004, 00:26.

                Comment


                • #9
                  Code:
                  <FilesMatch [^(robots)]\.txt>
                  deny from all
                  </FilesMatch>
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Comment


                  • #10
                    Das sieht gut aus, aber es geht leider nicht. Hab's grade ausprobiert. Es lassen sich alle .txt-Dateien oeffnen.
                    bei mir aufm server gehts, hab es vor dem posten getestet ... und da ich die idee recht gut finde, werde ichs auch weiter laufen lassen
                    <FilesMatch [^(robots)]\.txt>
                    würde afaik auf alle dateien zutreffen, die als endung txt haben und als letztes zeichen vor dem punkt kein (, r, o, b, t, s, )
                    Die Zeit hat ihre Kinder längst gefressen

                    Comment


                    • #11
                      ohne die runden klammern hättest du recht, so ist es aber der gesamt ausdruck "robots", der nicht vorher auftauchen darf
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Comment


                      • #12
                        ohne die runden klammern hättest du recht, so ist es aber der gesamt ausdruck "robots", der nicht vorher auftauchen darf
                        nein. durch die [ ] wird doch eine zeichenklasse definiert, alle zeichen dort drin sind erlaubt bzw. mit ^ nicht erwünscht.

                        da du keinen quantifier drangesetzt hast, stehen die [ ] für genau ein zeichen ... und zwar genau für die, die nicht in der klammer aufgeführt sind. dort mittels ( ) eine untergruppe zu definieren, ist genauso humbug, wie das angeben von quantifiern innerhalb einer zeichenklasse.

                        du kannst in zeichenklassen keine wörter im klassischen sinne definieren, da egal wieviel wörter du da reinschreibst, es immer nur die einzelnen zeichen sind, die überprüft werden.

                        so kenne ich das. ich lasse mich aber gern eines besseren belehren.
                        Die Zeit hat ihre Kinder längst gefressen

                        Comment


                        • #13
                          derHund hat recht:

                          robots.txt, disclaimer.txt und error.txt lassen sich oeffnen, index.txt aber nicht.

                          Gibt es eine Loesung(, die bei mir laeuft)?

                          Comment


                          • #14
                            Gibt es eine Loesung(, die bei mir laeuft)?
                            hmm,

                            wie gesagt, rein syntaktisch ist es diese
                            Code:
                            (?<!robots)\.txt$
                            .... trifft auf alle '.txt' zu, vor denen nicht 'robots' steht ... warum es bei dir nicht geht neustart des apache brachte nix?
                            Die Zeit hat ihre Kinder längst gefressen

                            Comment


                            • #15
                              Hab es grade nochma versucht. Es geht nicht.

                              Original geschrieben von derHund
                              neustart des apache brachte nix?
                              Ich hab keinen eigenen Server, sondern habe Webspace auf einem fremden Host. Da kann ich Apache nicht neu starten.

                              Comment

                              Working...
                              X