Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Simpler FrontController

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Simpler FrontController

    Hallo, ich hab ein grusliges Problem. Ich nutze folgenden Front-Controller, der soweit auch ganz gut funktioniert. Wenn ich allerdings: http://localhost/a:b eingebe, also ein : im URL-Pfad, bekomme ich folgende Meldung: Zugriff verweigert! Ich habe eigentlich erwartet, dass meine Fehlerseite angezeigt wird, wenn etwas nicht zutrifft. Könnt ihr mir sagen was falsch läuft.
    .htaccess
    Code:
    RewriteEngine On 
    RewriteRule ^ index.php [QSA,L]
    index.php
    PHP-Code:
    switch(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)){
        case 
    '/test':
            echo 
    'test';
            break;
        default:
            echo 
    'error';
            break;


  • #2
    Wenn ich allerdings: http://localhost/a:b eingebe, also ein : im URL-Pfad,
    Dein "grusliges Problem" hat absolut nichts mit PHP zu tun. Der Doppelpunkt ist ein reserviertes Zeichen. Da ist es nur Ok, wenn dir der Zugriff verweigert wird.


    URL-Aufbau aus Wiki
    Code:
         scheme-specific-part →                        →                       → |
         |
    http://hans:geheim@example.org:80/demo/example.cgi?land=de&stadt=aa#geschichte
    |      |    |      |           | |                 |                |
    |      |    |      host        | url-path          query            fragment
    |      |    password           port
    |      user
    scheme (hier gleich Netzwerkprotokoll)

    Kommentar


    • #3
      1. Ein URI ist kein URL
      2. Steht das was du suchst nach dem Rewrite im PATH_INFO-Value der $_SERVER-Superglobal schon fertig gesplitted, wenn der Webserver vernünftig konfiguriert wurde.

      Doppelpunkte in virtuellen Pfaden einer Url sind möglich und werden auch nicht als Port interpretiert.
      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

      Kommentar


      • #4
        Ok, und habt ihr ne Lösung für mich? Weiss grade nicht, wie ich weiterkomme?

        Kommentar


        • #5
          Zitat von tr0y
          2. Steht das was du suchst nach dem Rewrite im PATH_INFO-Value der $_SERVER-Superglobal schon fertig gesplitted, wenn der Webserver vernünftig konfiguriert wurde.
          Hast du das schon geprüft?
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Hab ich gecheckt, das ist leider nicht auf meinem Server vorhanden

            Kommentar


            • #7
              Zitat von tr0y Beitrag anzeigen
              Doppelpunkte in virtuellen Pfaden einer Url sind möglich
              Dann sollte die Benutzung allgemein keine Probleme bereiten - aber scheinbar gibt es Ausnahmen.

              Padal:
              Muß es unbedingt der : sein ?
              Umgebung: Win XAMPP? wenn ja, hilft ev. dieser alte Beitrag Doppelpunkt in URL unter Windows Apache

              Kommentar


              • #8
                Ich kann auf den : auch verzichten. Ich will nur unterbinden, falls man : in die URL eingibt, dass das Zugriff verweigert kommt. Es soll meine Fehlerseite kommen. Hier noch übrigens etwas interessantes: https://bugs.php.net/bug.php?id=66813

                Ich hab den FrontController mal entfernt und versucht die Seiten direkt anzuspringen. Das scheint irgendwie am Server (vllt. htaccess) zu liegen.

                @jspit: Ja, WIN, XAMPP.

                Kommentar


                • #9
                  done

                  Kommentar


                  • #10
                    Danke für deine Hilfe phpyton. Den kaffee spendier ich dir trotzdem noch

                    Kommentar


                    • #11
                      Der 403 Error kommt bei mir unter XAMPP/Win nur wenn ich "localhost/a:b" aufrufe, nicht jedoch bei einem Aufruf von "localhost/test/a:b" .

                      Eine eigene Fehlerseite (Stichwort ErrorDocument) löst das Problem für mich ohne PHP zu bemühen.

                      Kommentar


                      • #12
                        Bei mir verhält es sich genauso. Allerdings löst ErrorDocument das Problem bei mir nicht. Ich habe
                        ErrorDocument 403 /error.php in .htaccess geschrieben. Es ist aber nach wie vor gleich.

                        Macht aber eigentlich auch nix. Ich habe Windows zum entwickeln und laufen lasse ich das auf Linux. ich brauche halt nur die Gewissheit, dass das kein von mir verursachter Bug ist.

                        Kommentar


                        • #13
                          Ich frag mal einfach: ist denn die rewrite mod auch aktiviert ?

                          Welche Apache Version nutzt du ?

                          Post 2.4 kannst du statt modrewrite auch:

                          Code:
                          AcceptPathInfo On
                          DirectoryIndex disabled
                          DirectoryIndex index.php
                          FallbackResource /path/to/index.php
                          verwenden.

                          Deine Url findest du dann dort:
                          PHP-Code:
                          echo $_SERVER['PATH_INFO']; 
                          httpd.conf:
                          Benötigt mindestens: AllowOverride FileInfo
                          Empfohlen für die Entwicklung: AllowOverride All

                          Eine Woll-milch-sau .htaccess, die das korrekte "in any case" rewrite der Url erzwingt wäre:
                          Code:
                          Options -MultiViews
                          AcceptPathInfo On
                          
                          RewriteEngine On
                          RewriteBase /path/to/the/htaccess/directory
                          RewriteCond %{REQUEST_FILENAME} !-f
                          RewriteRule ^ index.php [QSA,L]
                          httpd.conf:
                          Benötigt mindestens: AllowOverride FileInfo, Rewrite-mod
                          Empfohlen für die Entwicklung: AllowOverride All, Rewrite-mod
                          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                          Kommentar

                          Lädt...
                          X