Ankündigung

Einklappen
Keine Ankündigung bisher.

mod rewrite und Framework Routing

Einklappen

Neue Werbung 2019

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

  • mod rewrite und Framework Routing

    Guten Tag,

    vorab: ich bin leider absolout kein Experte betreffend mod rewrite oder Apache Konfiguration und rewrite rules. Ich habe ein PHP Framework, welches wie folgt routet:


    PHP-Code:
    $pathInfo $_SERVER['PATH_INFO'];

    $routes = array(
        
    '/index' => array(
            
    'controller' => 'PageController',
            
    'method' => 'index'
        
    )
    );

    if (isset(
    $routes[$pathInfo])) {
        
    $route $routes[$pathInfo];
        
    $controller $container->make($route['controller']);
        
    $method $route['method'];
        
    $controller->$method();

    Es wird also die Methode index aus dem PageController beim Aufruf von 10.20.4.199/framework/web/index.php/index ausgeführt.

    Nun möchte ich mittels htaccess bzw. mod rewrite erreichen, dass der teil "index.php" nichtmehr für das ansteuern benötigt wird (Aufruf: 10.20.4.199/framework/web/index)

    Dazu müssen natürlich PATH_INFO und alle weiteren parameter (query string usw.) weiterhin an die index.php weitergereicht werden.


    meine htaccess Datei sieht wie folgt aus:

    Code:
    DirectoryIndex index.php
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^framework/web/(.*)$ /framework/web/index.php/$1 [L]
    phpCrow


  • #2
    Was ist die Frage?

    Kommentar


    • #3
      Hallo,

      die Frage ist, wie ich das Umschreiben der URL am besten durchführe. Das Routing in der index.php kann ich natürlich anpassen, sollten bessere Beispiele zu finden sein. Trotzdem muss die Grundfunktionalität gleich bleiben (aufruf von Controller und Methode).

      Mit meinem htaccess Beispiel und dem PHP Code im Framework funktioniert das nicht.


      Code:
      Not Found
      
      The requested URL /framework/web/login was not found on this server. 
      Apache/2.4.38 (Debian) Server Port 80
      Code:
      Not Found
      
      The requested URL /framework/web/index was not found on this server. 
      Apache/2.4.38 (Debian) Server Port 80

      Kommentar


      • #4
        Gib die .htaccess in /framework/web und ändere die .htaccess auf:
        Code:
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule .* index.php [L]

        Kommentar


        • #5
          vielleicht so?

          Code:
           RewriteEngine On
          RewriteBase /framework/web/
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule ^ index.php [L]
          PS: unverschämte Eigenwerbung ich habe neulich ein Router Tutorial auf Youtube eingestellt vielleicht ist er besser als jetzt controller zu erstellen
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

          Kommentar


          • #6
            Hallo,

            vielen Dank aber das ändert nichts am Ergebnis. Beim Aufruf von 10.20.4.199/framework/web/index wird weiterhin Not Found ausgegeben.

            Die htaccess liegt im verzeichnis web.

            Kommentar


            • #7
              Zitat von phpCrow Beitrag anzeigen
              vielen Dank aber das ändert nichts am Ergebnis. Beim Aufruf von 10.20.4.199/framework/web/index wird weiterhin Not Found ausgegeben.

              Die htaccess liegt im verzeichnis web.
              Dann ist der Server falsch konfiguriert. In dem Fall wende dich am besten an den Server-Admin.

              Kommentar


              • #8
                Update: Nun funktioniert die htaccess zwar soweit (es lang an der Apache Config), aber die PATH_INFO wird scheinbar nichtmehr richtig übermittelt:

                Notice: Undefined index: PATH_INFO on line 6

                Im $_SERVER Array existiert die PathInfo nun garnicht mehr, obwohl sich ja an der eigentlichen Anfrage nichts geändert hat. Muss ich nun über die REQUEST_URI den Teil nach dem letzten "/" auslesen, oder gibt es eine elegantere Lösung?

                Kommentar


                • #9
                  Zitat von phpCrow Beitrag anzeigen
                  Muss ich nun über die REQUEST_URI den Teil nach dem letzten "/" auslesen, oder gibt es eine elegantere Lösung?
                  REQUEST_URI IST die elegantere Lösung
                  apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                  Kommentar

                  Lädt...
                  X