PHP und ReWrite Engine

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

  • PHP und ReWrite Engine

    Hallo Zusammen

    ich bin schon seit einger Zeit daran am versuch die Rewrite Engine einzubauen, jedoch leider ohne Erfolg.

    Ich habe mir ein paar Tutorials angeschaut und auch so gut wie möglich die SUCHMUSTER zu begreiffen.

    Einen kleinen Erfolg konnte ich schon verbuchen. Mit Hilfe eines simplen Tutorial wurde aus "/index.php?id=12" den Link "/namederseite,12.html" gezaubert (Es wurde einfach richtig interpretiert beim verarbeiten für den Inhalt)

    Jetzt bin ich aber an meine Grenze gestossen und wäre sehr froh wenn mir jemand helfen könnte oder einen guten Link zu einem Tutorial liefern könnte.

    Die URL sieht so aus (Das ganze liegt auf dem Root und anstat "index.php?" benutze ich nur "?")

    HTML-Code:
    <a href="?nav=1,40,80">Link zur Testseite</a>
    Beispiel ID's erklärung:
    [X,x,x] 1 = die Kategorie ID
    [x,X,x] 40 = die Seiten ID
    [x,x,X] 80 = die Unterseiten ID

    Zu den ID's stehen natürlich in der Datenbank auch die passenden Namen.

    Den Link würde ich mit PHP so erstellen (Also die Navigation Ausgabe):

    PHP-Code:
    echo "<a href='".$cattitel."/".$navtitel."/".$catid."/".$navid."/".$subofid."/index.html"'>".$cattitel."</a>"; 
    Der HTML Output wäre dann irgendwie so:
    Testkategorie/MeineTestSeite/1/40/80/index.html

    Ich würde mir wünschen das die Rewrite Engine dies danach auch richtig ausdrückt / interpretiert und nicht ständig "Seite konnte nicht gefunden werden" anzeigt.

    Das müsste doch so ähnlich aussehen:
    RewriteRule ^(\w)/(\w)/(\d)/(\d)/(\wd)/index\.html$ /?nav=$1,$2,$3 [L]


    -----------------------------------------------------------

    PHP-Code:
    <?php
        
    // nach dem klicken des "htacces link" sollte doch das resultat "123,123,123" sein.
        
    echo $_GET['nav'];
        
        
    //* htacces link
        // so sollte doch der link aussehen wenn die htacces auf dem server ist
        
    echo '<a href="test/test/123/123/123/index.html">testlink</a>';
        
        
    //* originaler link
        // ohne die acces würde der link ja dann so aussehen
        
    echo '<a href="?nav=123,123,123">testlink</a>';
    ?>
    Beim klicken des "htacces link" kommt jedoch immer:

    Objekt nicht gefunden!

    Der angeforderte URL konnte auf dem Server nicht gefunden werden. Der Link auf der verweisenden .......

    Natürlich, weil dieser Ordner/Datei nicht auf dem Webserver liegt.


    -----------------------------------------------------------

    PS: Ja ich habe die Suchfunktion benutzt und mir mühe gegegeben beim verfassen des Beitrags.

    Ich bin für jeden Tipp oder Link sehr Dankbar. Das schönste wäre natürlich wenn mir jemand beim kurz die Code verbesserungen mitteilen könnten hier im Forum. Wir werden ja sehen.

    Vielen Dank im Voraus!

  • #2
    du kannst ja mit $1 auf die variablen zugreifen
    RewriteRule ^news-(.*).html$ news.php?readmore=$1
    RewriteRule ^news-(.*)-(.*).html$ news.php?readmore=$1&do=$2

    verstehst du den sinn dabei?

    aus news.php?readmore=3&do=add wird news-3-add.html
    Gruß
    Uzu

    private Homepage

    Kommentar


    • #3
      Danke schonmal UzumakiNaruto für deine schnelle Antwort. In einem anderen Forum wurde mein Post zuerst verschoben und danach erhielt ich Tage keine Antwort. Herzlichen Dank also schonmal :-)

      Ich möchte aber noch zusätzlich informationen in diese URL schreiben.

      WARUM DENN?

      Google freut sich doch über Informationen jeglicher art :-). Du hast ja noch "news" davor hinzugefügt, dort möchte ich noch den Namen der Kategorie hinschreiben in der die News liegt. (zBsp.)
      PHP-Code:
      echo '<a href="'.$newskategorie.'-'.$newsid.'-'.$_GET['do'].'">Hier geht es zum News Eintrag 3</a> 
      Wie mache ich sowas?


      ----- Nochmals zum nach vollziehen:

      in deinem Beispiel müsste ich also den Link so gestalten:

      PHP-Code:
      echo '<a href="news-3-add.html">Hier geht es zum News Eintrag 3 :-)</a>'
      Abfangen kann ich die "News ID 3" nach wie vor mit
      PHP-Code:
       $_GET['readmore'
      ??? (aus deinem Beispiel "news.php?readmore=3&do=add")
      Zuletzt geändert von basilsue; 06.08.2008, 14:57.

      Kommentar


      • #4
        mod_rewrite ist ja nur dafür da, damit die links "schöner" aussehen (kürzer sind)

        der apache bekommt die anfrage news-3-add.html und ändert das intern um zu news.php?readmore=3&do=add und holt sich dann die php datei und dann wird abgearbeitet als hättest du ganz normal im browser nach news.html?readmore=3&do=add gefragt

        wenn es $1 und $2 gibt ... wird es wohl auch $3, $4, usw geben
        probiere es doch einfach mal aus.

        erstmal versuche deinen link wie gewohnt zu bauen (mit normalen get parametern)
        danach erstellst du deine RewriteRule und testest deinen "neuen" link

        vorgekaut wird nicht .... selbst ist der/die mann/frau
        Gruß
        Uzu

        private Homepage

        Kommentar


        • #5
          ja hast vollkommen recht @ vorgekaut wird nicht. (Mann btw)

          Werde das gleich mal ausprobieren und mich melden. Falls noch Hilfe-Bedarf besteht

          Danke!

          Kommentar


          • #6
            Ich sag es mal so: Entweder bin ich so enttäuscht von mir oder von rewriteEngine :-)


            Das ist meine index.php mit der ich das ganze Teste. Wenn der "Htacces" Link funktioniert müsste er ja etwas anzeigen bei echo $_GET['nav']. Statdessen kommt einmal mehr "Not Found. The requested document was not found on this server." :*-(

            PHP-Code:
                <?php
                    
            // nach dem klicken des "htacces link" sollte doch das resultat "123,123,123" sein.
                    
            echo $_GET['nav'] . "<hr>";
                    
                    
            //* htacces link
                    // so sollte doch der link aussehen wenn die htacces auf dem server ist
                    
            echo '<a href="1-2-3.html">testlink</a><hr>';
                    
                    
            //* originaler link
                    // ohne die acces würde der link ja dann so aussehen
                    
            echo '<a href="?nav=123,123,123">testlink</a><hr>';
                
            ?>
            Das hier ist der Auszug aus der HTACCES:

            PHP-Code:
            RewriteEngine On
            RewriteRule 
            ^(.*)-(.*)-(.*).htmlindex.php?nav=$1&,$2,$[L
            Habe es Lokal und auf dem Webserver getestet unter:
            http://freakstylez.ch.server01.mywebserver.ch/
            Zuletzt geändert von basilsue; 06.08.2008, 15:34.

            Kommentar


            • #7
              index.php?nav=$1&,$2,$3

              ist das ein funktionierender link in php????

              index.php?nav=$1&param2=$2&param3=$3 wohl eher
              Gruß
              Uzu

              private Homepage

              Kommentar


              • #8
                es ist ein funktionierender link, weil ich die variabeln mit explode "," auseinander nehme. Spielt das für Rewrite eine Rolle?

                Wie dem auch sei, ich möchte das Rad nicht neu Erfinden und habe es umgeschrieben:

                PHP-Code:
                    <?php
                        
                // nach dem klicken des "htacces link" sollte doch das resultat "123,123,123" sein.
                        
                echo $_GET['p1'] ." " .$_GET['p2']." " .$_GET['p3'] . "<hr>";
                        
                        
                //* htacces link
                        // so sollte doch der link aussehen wenn die htacces auf dem server ist
                        
                echo '<a href="1-2-3.html">testlink</a><hr>';
                        
                        
                //* originaler link
                        // ohne die acces würde der link ja dann so aussehen
                        
                echo '<a href="?p1=123&p2=123&p3=test">testlink</a><hr>';
                    
                ?>
                und in der htacces steht nun

                PHP-Code:
                RewriteEngine On
                RewriteRule 
                ^(.*)-(.*)-(.*).htmlindex.php?p1=$1&p2=$2&p3=$[L
                Ihr/Du dürft/darfst 3x Raten was nun kommt:

                "Not Found. The requested document was not found on this server."

                :-( HELP :-)

                Kommentar


                • #9
                  mod_rewrite an???
                  ist der apache so konfiguriert das mod_rewrite auch funken kann?

                  hatte das die tage bei mir auch.

                  lokal ging es nicht (vhosts falsch konfiguriert) .. aus dem internet ging es.
                  Gruß
                  Uzu

                  private Homepage

                  Kommentar


                  • #10
                    Ich habe es jeweils Lokal und auf 2 verschiedenen Webspaces, Anbieter getestet => es funktioniert nicht. Es muss ein Fehler am Code sein. Kann mir jemand helfen? Gibt es noch ein paar Fackundige Soziale Menschen ? :-)

                    Kommentar


                    • #11
                      Schuss ins Blaue:
                      Dir ist schon bewusst, dass ein . in einem regulären Ausdruck eine besondere Bedeutung hat? Der steht für ein x-beliebiges Zeichen. Wenn du wirklich den . als Zeichen finden willst musst du diesen escapen.
                      Gute Seite zum Thema: www.modrewrite.de
                      Zuletzt geändert von jahlives; 06.08.2008, 17:06.
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Original geschrieben von jahlives
                        Schuss ins Blaue:
                        Dir ist schon bewusst, dass ein . in einem regulären Ausdruck eine besondere Bedeutung hat? Der steht für ein x-beliebiges Zeichen. Wenn du wirklich den . als Zeichen finden willst musst du diesen escapen.
                        Gute Seite zum Thema: www.modrewrite.de
                        ein x-beliebiges zeichen ist schon richtig .. natürlich kann man noch unterscheiden ob das zahlen oder buchstaben sein sollen
                        Gruß
                        Uzu

                        private Homepage

                        Kommentar


                        • #13
                          Original geschrieben von UzumakiNaruto
                          ein x-beliebiges zeichen ist schon richtig .. natürlich kann man noch unterscheiden ob das zahlen oder buchstaben sein sollen
                          Richtig, mag sein - optimal, nein. Mehr dazu ist über die Suche (Greedy Dot versus Negated Character Class) zu finden.
                          Besser:
                          Code:
                          ^([^-]*)-([^-]*)-([^-]*)\.html$
                          Grüße
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            Getestetes Beispiel:
                            die .htaccess enthält
                            Code:
                            RewriteEngine On 
                            RewriteRule ^(.*)-(.*)-(.*).html$ index.php5?p1=$1&p2=$2&p3=$3 [L]
                            in der Datei index.php5 am Anfang in php-Tags
                            Code:
                            var_dump($_GET)
                            irgendwo im html Teil
                            Code:
                            <a href="1-2-3.html">testlink</a>
                            und nach klick auf den Link liefert var_dump
                            Code:
                            array(3) { ["p1"]=>  string(1) "1" ["p2"]=>  string(1) "2" ["p3"]=>  string(1) "3" }
                            Was kann man alles falsch machen? Die Datei heisst ".htaccess" und liegt im fraglichen Verzeichnis? Das Modul rewrite muss geladen sein und für dieses Verzeichnis muss die Option "AllowOverride All" gesetzt sein, (keine Ahnung, ob eines der anderen Schlüsselwörter auch ausreicht??) damit die .htaccess Beachtung findet.
                            Wilfried
                            Die Macht der Presse spüren vor allem die Weintrauben.

                            Kommentar


                            • #15
                              ein x-beliebiges zeichen ist schon richtig .. natürlich kann man noch unterscheiden ob das zahlen oder buchstaben sein sollen
                              Wie Griecherus schon sagte hängt "richtig" oder "falsch" in diesem Falle davon ab ob der RegExp GREEDY oder UNGREEDY ist. Bei einen RegExp der GREEDY ist macht es keinen Sinn hinter .* noch nach einem expliziten Muster zu suchen, denn der RegExp wird alles mit .* matchen
                              Was kann man alles falsch machen? Die Datei heisst ".htaccess" und liegt im fraglichen Verzeichnis?
                              Wenn ich mir das anschaue
                              Code:
                              array(3) { ["p1"]=>  string(1) "1" ["p2"]=>  string(1) "2" ["p3"]=>  string(1) "3" }
                              dann ist das doch richtig. Oder sehe ich das komplett falsch? Du hast doch die Bestandteile der URL als GET Parameter erhalten und das war es doch was du wolltest
                              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                              Kommentar

                              Lädt...
                              X