DiamondDog: Frage zu Umelitung mit .htaccess

Hallo Leute,
ich hab da ein Problem mit meiner .htaccess und zwar würde ich gerne nicht direkt auf eine Seite weiter leiten sondern zb auf index.php?site=error/401
Ich weiß nicht ob das möglich ist und wie, zur Zeit hab ich es so in der .htaccess stehen:

ErrorDocument 401 /error/401.html

und das hier funktiniert ja nicht:

ErrorDocument 401 /index.php?site=error/401

Ich hoffe das mir da wer weiter Helfen kann, google hat nichts brauchbares ausgegeben kann aber auch da drann liegen, das ich nicht genau wuste wonach ich suchen muss.

Danke schon mal fürs Helfen.

Mfg Dog

  1. hi,

    Ich hoffe das mir da wer weiter Helfen kann, google hat nichts brauchbares ausgegeben kann aber auch da drann liegen, das ich nicht genau wuste wonach ich suchen muss.

    Du suchst mod_rewrite.

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. hi,

      »» Ich hoffe das mir da wer weiter Helfen kann, google hat nichts brauchbares ausgegeben kann aber auch da drann liegen, das ich nicht genau wuste wonach ich suchen muss.

      Du suchst mod_rewrite.

      Hotti

      Ok danke schon mal. Hab jetzt versucht mich dort zu registrieren um meine Frage dort zu Posten weil ich nur Bahnhof verstehe. Aber der Anti Spam Bot hat meine Mail gespeert.

      Oder kann mir jemand schnell zeigen wie ich meine .htaccess ändern muss?
      Weil ich hab zwar verstanden wie ich eine Seite weiter leiten kann, aber nicht wie ich es mache für die verschiedenen Fehlerseiten halt 401 auf 401 500 auf 500 usw...

  2. hi,

    das sollte eigentlich auch gehen, bis auf eine Kleinigkeit, s.u.

    ErrorDocument 401 /index.php?site=error/401

    ^

    Ersetze den "/" mal durch ein anderes, nicht_Sonderzeichen (Script anpassen):

    ErrorDocument 401 /index.php?site=error_401

    Getreu den Vereinbarungen zu Parametern in einem URI
       URL?parameter=value

    Hote

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. hi,

      das sollte eigentlich auch gehen, bis auf eine Kleinigkeit, s.u.

      »» ErrorDocument 401 /index.php?site=error/401
                                                ^

      Ersetze den "/" mal durch ein anderes, nicht_Sonderzeichen (Script anpassen):

      ErrorDocument 401 /index.php?site=error_401

      Getreu den Vereinbarungen zu Parametern in einem URI
         URL?parameter=value

      Hote

      Ok das hab ich jetzt nur halb verstanden oder Falsch.
      Also das Problem ist ja , das der / da für ist um das Verzeichniss anzuzeigen oder so oder nicht? Also es heist ja Domain/error/404.php normalerweise und wenn ich den / weg mache findet er ja den Ordner nicht oder?

      1. hi,

        Ok das hab ich jetzt nur halb verstanden oder Falsch.
        Also das Problem ist ja , das der / da für ist um das Verzeichniss anzuzeigen oder so oder nicht?

        Es gibt ein paar reservierte Zeichen in URI's, hier interessieren der Slash und das Fragezeichen.

        Der "/" am Anfang kennzeichnet die http-Serverroot, weiter hinten dient ein "/" als Trenner für Verzeichnisse.

        Beispiel:
        http://example.org/          # wir sind auf der root   /
        http://example.com/astro/    # wir sind im Verzeichnis /astro
        http://example.com/cgi-bin/  # dito

        Nun haben wir Scripts oder Ressourcen, die einen oder mehrere Parameter brauchen. Beispiel:

        http://example.com/index.php

        Zum Trennen der Parameter vom Locator gibt es das "?"

        http://example.com/index.php?parameter=value;x=y
        <------------- URL -------->|<- QUERY_STRING -->|
        <---------------------- URI ---------------<|

        Alle Parameter zusammen bilden den QUERY_STRING, den Teil nach dem "?". Im QUERY_STRING selbst darf es keinen "/" geben.

        Jetzt soll "x=y" den QUERY_STRING ergeben, wir versuchen es so:

        http://example.com/astro/index.php/x=y

        Was passiert? Der Webserver quittiert sowas mit einem status: 404 not found.
        Weil: "index.php" wird als Verzeichnis interpretiert und "x=y" als Ressource in diesem Verzeichnis ---> was es gar nicht gibt. Wie auch soll der Server wissen, wo bei mir die Ressource aufhört und der Parameter beginnt?

        Machen wir es besser so:

        http://example.com/astro/index.php?x=y

        QUERY_STRING <= "x=y"

        Wenn Du das verstanden hast, kannst Du dich an mode_rewrite machen.

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  3. Hallo Dog,

    Ich weiß nicht ob das möglich ist und wie, zur Zeit hab ich es so in der .htaccess stehen:

    es ist genauso möglich. Es macht aber keinen Sinn!
    Der Eintrag...

    ErrorDocument 401 /error/401.html

    ...verhindert, dass man sich überhaupt durch die vom Webserver unterstützten Authentifizierungsmethoden (Base, Digest) anmelden kann. Das hängt damit zusammen, dass der Statuscode 401 (vgl. RFC 2616 section 10.4.2) zur Aufforderung zur Authentifizierung dient.

    Ein Beispiel der HTTP-Header:

    HTTP/1.1 401 Authorization Required
    [Andere header]
    WWW-Authenticate: Basic realm="Geschützte Ressource"

    Entsprechende Konfiguration in einer .htaccess:

    AuthBasicProvider file  
    AuthType Basic  
    AuthName "Geschützte Ressource"  
    AuthUserFile $file_name  
    Require valid-user
    

    Setze ich aber nun ein ErrorDocument für den Status 401, wird die angegeben Ressource vom Apachen mit dem Status 200 ausgeliefert:

    HTTP/1.1 200 OK
    [Andere header]
    WWW-Authenticate: Basic realm="Geschützte Ressource"

    Das hat zur Folge, dass ein Browser, der (eben nur) bei Status 401 dem Nutzer ein Prompt zur Eingabe von Name und Passwort ausgibt, sich durch den Status 200 nicht gemüssigt sieht, diesen Prompt anzubieten.

    Wenn durch dieses Verfahren ein Nutzer-Login via PHP erstellt werden soll, so macht man damit die Meile zu sieben-vierteln.

    Gruß aus Berlin!
    eddi

    --
    VEB Opel, Geruchsproben und Stasi 2.0, Zensur...
    IHR WOLLTET MERKEL!