Ankündigung

Einklappen
Keine Ankündigung bisher.

mod-rewrite, lesbare-/ SEO-Url / Verständnissfrage / Best Practice

Einklappen

Neue Werbung 2019

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

  • mod-rewrite, lesbare-/ SEO-Url / Verständnissfrage / Best Practice

    Moin zusammen.
    Ich beschäftige mich grade mit dem mod-rewrite (Apache) und bin begeistert, was damit alles möglich ist...

    Jetzt aber mal eine Verständnissfrage dazu.

    Angenommen ich habe einen Blog mit verschiedenen Artikeln in verschiedenen Kategorien...
    ohne mod-rewrite sähe meine URL z.B. so aus...
    Code:
    meine-seite.de/artikel.php?category=2&artikel=214
    mit mod-rewrite und sprechenden URL's wäre es so ja recht hübsch...
    Code:
    meine-seite.de/KATEGORIE/ARTIKEL
    also z.B.
    Code:
    meine.seite.de/Software/PHP-ist-toll
    sieht natürlich viel besser aus...

    jetzt zu meiner Frage:
    das Beispiel oben wäre ja "übersetzt"
    Code:
    meine-seite.de/artikel.php?categorie=Software&article=PHP-ist-toll
    das heißt ja aber auch, das wiederspricht allem, was ich bisher über Datenbanken geglaubt habe zu verstehen...
    Um diesen Artikel jetzt aufzurufen kann ich ja nicht einfach die Artikel- und Kategorie-ID aus der Datenbank nehmen, die ja mit einem Index versehen ist um schneller durchsucht werden zu können,
    sondern ich muss jetzt eine Volltextsuche auf den Namen des Artikels / der Kategorie machen...

    Außerdem muss ich ja in der Datenbank einen entsprechenden SEO-freundlichen Namen mit abspeichern,
    denn
    Code:
    PHP ist toll
    (mit Leerzeichen) wäre ja nicht so optimal als URL
    dazu brauche ich also wieder einen DB-Spalte mehr... und muss zusätzlich einen SEO-freundlichen Namen erzeugen...

    Ist das tatsächlich so? oder bin ich auf dem Holzweg und übersehe mal wieder irgendwas grundlegendes?

  • #2
    Du kannst doch Deine URL aufbauen, wie es Dir gefällt. Schau doch mal in die URL dieses Themas, da findest Du die Thread-ID vor dem Titel. Kannst Du also schick für DB Abfragen verwenden.
    Auch anderes ist möglich:
    Code:
    www.example.com/software/0815/mein-produkt
    da hast Du die ID auch untergebracht. Du bist da frei in Deiner Entscheidung
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Ich z.B. benutze nur einen "Slug" ohne Kategoorienunterteilung für alle Bereiche meiner Applikation. Finde ich persönlich besser weil auch kürzer.
      Ich habe deshalb ein Repository wo alle diese Slugs mit dem entsprechenden Verweisen beinhaltet. Womit ich dann auch beim erstellen dieser Slugs auf Duplikate prüfen kann und natürlich für das Routing.


      Code:
       
       www.example.com/mein-produkt   
       www.example.com/kategoriename   
       www.example.com/blog-artikel

      Kommentar


      • #4
        Wäre mir zu statisch. Ich möchte meine Projekte mit möglichst wenig Aufwand um weitere Seiten erweitern. Wenn ich dann entsprechende Routes und Backgroundlogik dahinter verwende, ist das ohne weiteres möglich, ohne irgendwo einen Verweis hinzufügen oder anpassen zu müssen.

        Aber... jeder wie er mag
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Vielen Dank für eure Anmerkungen. Da das mein erster Bastelversuch in diese Richtung ist, hab ich meine Datenbank und die Logik schon das 3te mal umgebaut weil mir immer irgendwas nicht so gefällt.. aber das gehört zum Üben dazu...

          ein Problem hab ich jedoch mit meiner mod_rewrite Rule...

          ich kriege ums verrecken keine Bindestriche in meine URL's...

          meine Regeln sehen so aus...

          Code:
          RewriteRule ^(\w+)/?$ index.php?page=$1 [L]
          RewriteRule ^(\w+)/(\w+)/?$ index.php?page=$1&category=$2 [L]
          RewriteRule ^(\w+)/(\w+)/(\w+)/?$ index.php?page=$1&category=$2&article=$3 [L]
          ich denke mal, das Problem liegt an dem "w" welches wohl am Bindestrich trennt und 2 oder mehr Wörter draus macht...

          Da RegEx doch eher fies sind, komme ich an dem Punkt nicht wirklich weiter. Bisher behälfe ich mit stattdessen mit dem Unterstrich, aber schöner wärs, wenn der Bindestrich funktionieren würde...

          Jemand ne Idee?

          Kommentar


          • #6
            Du machst das auch unnötig kompliziert. Leite einfach alle Anfragen an index.php weiter:
            Code:
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} -s [OR]
            RewriteCond %{REQUEST_FILENAME} -l [OR]
            RewriteCond %{REQUEST_FILENAME} -d
            RewriteRule ^.*$ - [NC,L]
            RewriteRule ^.*$ index.php [NC,L]
            Und in PHP verwendest du dann einen Router. Sowas gibts schon fix fertig, zum Beispiel: https://github.com/nikic/FastRoute

            Kommentar


            • #7
              Okay, vielen Dank für den Link. Das werd ich mir die Tage mal ansehen...

              gäbe es, darüberhinaus, eine Möglichkeit meine Rule so umzuschreiben, das ein Bindestrich funktioniert?

              Kommentar


              • #8
                gäbe es, darüberhinaus, eine Möglichkeit meine Rule so umzuschreiben, das ein Bindestrich funktioniert?
                Wie Hellbringer es schon sagt leite alle Anfragen auf index.php

                Hier wäre ansonsten noch ein mein Router inklusive Demo App:
                https://github.com/tobento-ch/service-routing

                Kommentar


                • #9
                  Zitat von Supermicha Beitrag anzeigen
                  ich denke mal, das Problem liegt an dem "w" welches wohl am Bindestrich trennt und 2 oder mehr Wörter draus macht...
                  Ja, w steht für word. Wenn du alles zwischen den Slashs haben willst, kannst du ([^/]*) verwenden. Der Ansatz über PHP ist aber heutzutage der Standard. Ist im Prinzip auch nicht viel anders. Es wird mit
                  Code:
                  RewriteRule .*$ index.php
                  alles auf index.php umgeleitet und in PHP wird anhand der aufgerufenen URL ($_SERVER['REQUEST_URI']) bestimmt was zu tun ist. Das erfordert natürlich ein paar Anpassungen an der Anwendung. Die Links die dir die anderen gepostet haben, übernehmen die Auswertung von u.A. $_SERVER['REQUEST_URI'] und vereinfachen das handling für dich.

                  PS: das Rewrite ist etwas komplizierter, siehe z.B. hellbringer, weil du assets (css, grafiken, js) in der Regel dem Webserver überlassen willst.

                  Kommentar


                  • #10
                    Hallo,
                    Ja grundsätzlich leite ich schon alles auf die index.php um...
                    Nur bisher mit dem Unterschied, das ich nicht die request_uri nutze, sondern mir die mod_rewrite die Adresseteile in Parameter zerlegt...
                    Das war das verständlichste Beispiel was ich zu dem Thema gefunden hatte.
                    Das mit der Request-uri werd ich mir aber auch Mal ansehen....

                    Kommentar

                    Lädt...
                    X