mal wieder... mode_rewrite

  • Tach !

    Also ein so großer Dau wie damals bin ich zwar nimmer, aber
    momentan hat mich ein Bekannter vor ein Problem gestellt,
    bei dem ich nicht wirklich weiterkomme...

    Seine URLs sind momentan (abhängig von der jeweilgen page) etwa so

    Code
    www.domain.de/news
    www.domain.de/artikel&id=2
    www.domain.de/artikel_detail&id=999&c=2

    er hätte das nun aber gerne so

    Code
    www.domain.de/news
    www.domain.de/apache
    www.domain.de/apache/xampp

    Also statt der ID des produkts den namen hinterlegt.
    Die 2 dahinter ist für ihn unwichtig (für mich nicht)

    Umwandeln nach

    Code
    www.domain.de/news
    www.domain.de/artikel/2
    www.domain.de/artikel_detail/999/2

    is ja noch einfach.

    Aber wie kann ich die IDs (die ich dann auf der aufgerufenen Seite benötige) "umgehen" ?
    Für jeden Wert eine eigene Regel definieren is ja wahnsinn :|

    Hab ihm schonmal gesagt, dass seine Idee nicht umsetzbar is. Aber wollte mich trotzdem davor hier nochmal erkundigen.

  • super, die links kenn ich bereits. hast du dir eigentlich die frage genau
    durchgelesen oder wieder nur einfach irgendwas gepostet damit halt was
    drinsteht ? des von dir bringt mir halt mal absolut garnix. hab ja extra gesagt,
    dass ich mich bereits ein wenig mit mod_rewrite auskenne. ich kenn auch die
    syntax.

    aber ich weiß nicht wie ich von einem artikel (den er in der url haben will)
    auf die id bzw die seite schließen kann. und bevor jetzt kommt "wir keinen
    ja nicht den aufbau deiner seite" - mir gehts ja nicht um eine ausgearbeitete
    lösung...

  • Mhm Driver, irgendwie ist mir grad nicht klar was du meinst :D
    Also, dein Bekannter hat URLs der folgenden Art.

    Code
    www.domain.de/seite
    www.domain.de/unterseite
    www.domain.de/unterseite&sprache=1337
    www.domain.de/unterseite&port=80

    Wenn ich dich richtig verstehe hätte er/du daraus gerne etwas in der art wie folgt:

    Code
    www.domain.de/seite
    www.domain.de/unterseite
    www.domain.de/unterseite/leetspeak
    www.domain.de/unterseite/http

    Geht meine Annahme richtig, dass die Seiten gemäß einer ID in einer Datenbak liegen und ihr also nicht mehr die ID übergeben wollt, sondern ein passendes Stichwort um die URL für Otto-Normal Benutzer zu vereinfachen ?

    Wenn dem so ist, wird das eher ein größeres Problem.
    Du müsstest dann wirklich für jeden Wert eine eigene Regel definieren oder das Backend der Seite so umschreiben, dass dieses die Werte verarbeiten kann und nicht mehr auf die IDs angewiesen ist. Ansonsten erklär doch bitte noch näher, wie die Aufrufe dann verarbeitet werden.

    Edit: Ich würde sonst vorschlagen ein Skript zu schreiben, dass dir die entsprechenden Mod Rewrite Regeln aus der Datenbak o.ä. erstellt, das würde massig Handarbeit spaaren ;)

  • jup, das stimmt im prinzip. in der url steht momentan die seite die aufgerufen wird,
    dahinter die id des artikels und evtl noch die kategorie.

    und später soll nur der name der kategorie und der name des artikels drinstehen...
    also statt 2 -> apache und statt 999 -> xampp (als beispiel). der eigentliche seitenname
    (der auf den sich des include im index.php bezieht - artikel_detail oder artikel) sollte ganz
    verschwinden.

    hm, des mit den regeln hab ich befürchtet. die aufrufe müsste ich klar auch anpassen,
    da aber des ganze dynamisch is sinds im prinzip nur 3 seiten -also da hält sich das
    ganze im rahmen....

    edit: der Dateiname is momentan erstmal unerheblich. des könnt ich ihm schon schmackhaft
    machen wenn ich evtl namen weng anpasse... aber wie komm ich von der id auf den Namen..

    edit2: an so ein skript hab ich auch schon gedacht und teilweise angefangen. bloß wären des
    sicher fast 1000 zeilen.... hat mod_rewrite ne grenze ?

  • Die einzige Idee, die ich sonst noch hätte wäre das mod_rewrite Modul umzuschreiben, sofern dies möglich ist root / v Server, so dass es vorher eine Liste nach den IDs durchsucht, aber das ist imo. ein wenig zu aufwendig.
    Ansonsten wäre da wie gesagt die Lösung das Backend anzupassen, so dass es den richtigen Content basierend auf den Namen raussucht.
    Sonst fällt mir leider auch nichts ein.

  • jojo, ich versteh dich nicht ganz... beziehung zwischen namen des artikels
    und datenbankeintrag. also der artikel steht in der datenbank. ne beziehung
    zwischen dem artikel und dem namen der seite gibt es nicht.

  • Vorrausgesetzt, ich habe das jetzt halbwegs richtig verstanden, könnte ich mir sowas in der Art vorstellen (beziehe mich jetzt auf das Beispiel im ersten Post mit den 2 Seiten "artikel" und "artikel_detail):

    Urls:

    Code
    apache
    apache/xampp

    .htaccess

    Apache Configuration
    #nur ein Parameter wird übergeben => Seite = artikel
    RewriteRule ([a-zA-Z]+) index.php?artikel=$1
    
    
    #2 Parameter => Seite = artikel_detail
    RewriteRule ([a-zA-Z])+\/([a-zA-Z]+) index.php?artikel=$1&category=$2


    gegebenenfalls sogar noch die Parameternamen ändern, um die anzuzeigende Seite zu unterscheiden.

    in der include-logik muss nun also noch überprüft werden, welche Parameter übergeben wurden um zu entscheiden, welche Seite aufgerufen werden soll.
    Das ist an sich eine unsaubere Lösung, aber bei gerade mal 3 Seiten sollte das gerade noch so machbar sein.

    Jetzt haben wir es also schon geschafft, nur anhand der Anzahl Parameter (oder speziellen Variablennamen) zu entscheiden, welche Seite eingebunden werden soll.
    Jetzt müssen wir noch den Artikel und je nach dem die Kategorie auslesen.
    Nun greift das Argument "wir kennen ja den Aufbau nicht" leider doch. Mit etwas Glück ist der Artikelname "apache", welchen wir ja als Parameter "artikel" über die url bekommen haben, in der Datenbank eindeutig (das meinte ich vorhin), d.h. es gibt ein Feld ala "title" in der Artikel-Tabelle. Dann ist das Problem ja quasi schon gelöst.
    Andernfalls kommst du um eine neue Tabelle, welche Artikelnamen mit den realen Artikeln verknüpft, nicht drumrum. Die müsste dann so aussehen, das für jeden Artikel ein Wertepaar id,url_name hinterlegt wird. Das wäre für die Umstellung gut arbeit, kann aber später automatisch beim anlegen eines neuen Artikels passieren.
    Dasselbe Spiel kommt dann nochmal für die Kategorien.
    Dann könntest du über diese Verknüpfungstabelle die entsprechenden Datensätze ziehen, was einfacher zu pflegen sein sollte als eine .htaccess mit 1000 Zeilen.

    Wenn ich jetzt komplett ins Klo gegriffen habe, müsstest du dann tatsächlich mal die Datenbank- und Seitenstruktur posten, aber hoffentlich hilft dir das schon.

    Grüße,
    jojo


  • ok, stimmt. garnichtmal so dumm. muss morgen nochmal mit ihm reden.
    wenns dumm kommt (er will gerde weng umbauen) hat er nämlich bald noch
    ne seite mit einem parameter. wo ich dann bei deinem beispiel wieder ins
    schleudern komme, da nicht nicht weiß welche gemeint is...

    mal guggn. danke euch weil...


    btw. der pflegeaufwand mit der .htaccess und den 1000 einträgen wär nichtmal
    soo wild. er pflegt im an einem tag im monat ein paar artikel ein. ich könnt ihm n
    php-skript in seinen admin-bereich legen dass direkt die .htaccess erstellt und die
    alte löscht...denk ich :|

    is bloß die frage - wirken sich 1000 rewriterules irgendwie negativ aus ? ladezeit oder so ?