Seite 1 von 1
url-Name aus der DB dynamisch generieren?!
Verfasst: 09.10.2007 16:34
von fR33$tyler
Hallo´le,
ich meld mich nach ner ganzen Weile mal wieder zu Wort... der beste Tip den ich bis jetzt bekommen habe war "mod rewrite"
Ich hab nur ein kleines Problem, was ich nicht ganz kapier.... ich versuchs mal in ein Beispiel zu fassen:
1) ich hab ne mysql mit der tabelle bzw. spalten "
Name" und "
ID"
2) meine URL sieht so aus:
test.php?id=1
3) mein Modrewrite sieht so aus:
RewriteEngine on
Options FollowSymLinks
RewriteBase /
RewriteRule ^test-([1-9][0-9]*).html test.php?id=$1
-----------------------
Soweit so gut... ->
test-1.html funzt
Wenn jetzt aber im Feld "Name" z.B.
Hanswurst unter ID 1 steht... und ich ne URL haben möchte wie Amazon, Ebay etc.:
test-Hanswurst-1.html
wie bekomm ich das dynamisch hin?
d.h. wenn ich nicht 1000ende von Inhalte von Hand in die htaccess klopfen mag... sondern:
aus der mysql die Inhalte auslesen und irgendwie in die htaccess schreiben oder in ne config oder ka. was????
Denn wenn Morgen 2000 "Wursthans" von ID 2-2001 dazu kommen... müsst man ja jede URL und htaccess nachpflegen... ich hab aber keine Idee in welche Richtung das realisierbar ist (gebt mir mal n schugger in die richtige Richtung bitte)
Danke & Grüßle
Verfasst: 10.10.2007 17:45
von Forrest Gump
Generiere doch den HTML link so, dass der Name darin vorkommt. So in etwa wie <a href="test-{$name0-{$id}.html"></a>
Gruß Forrests
Verfasst: 11.10.2007 07:45
von fR33$tyler
den Link generieren ist kein Thema... nur wie setz ich das mit Modrewrite um?
Hat z.B. Ebay n Script, dass bei einem neuen Artikel noch ne htaccess mit entspr. Infos schreibt? oder kann man das doch so lösen wie z.B. hier:
Code: Alles auswählen
RewriteRule ^test-([A-Za-z0-9-)+])-([0-9]+).html?$ test.php?name=$1&id=$2
(zumin. ist das nur n Ansatz - scheiter aber trotzdem zwecks dynamik)
Nur woher kennt Modrewrite den "name=$1"?
Hm
Verfasst: 11.10.2007 10:34
von Forrest Gump
aus dem ersten Klammerpaar () des Patterns.
Welche Struktur haben denn die Links, welche die Anfrage starten?
Verfasst: 11.10.2007 10:53
von fR33$tyler
Danke für deine Antwort Forrest Gump.
Die Links sind je nach Bereich unterschiedlich und das werd ich auch anpassen müssen.. aber nehmen wir doch mal den Thread hier als Bsp:
aus
soll werden
Code: Alles auswählen
http://www.modrewrite.de/foren/url-name-aus-der-DB-dynamisch-generieren.html
Also hab ich in der DB ne
$ID zum Thread (18997)
-> daraus hol ich mir den
$THREADNAME (url-Name aus der DB dynamisch generieren?!)
-> hau anschl. die Sonderzeichen raus und ersetz die Leerzeichen (url-name-aus-der-DB-dynamisch-generieren)
-> bastel
.html dazu
und fertig ist der Link (so sollte er aussehen)
Nun fehlt mir der Bezug von $THREADNAME zur $ID im mod_rewrite.... (das mein Problem grad) - Sorry, wenn ich auf m Schlauch steh...
Verfasst: 11.10.2007 11:20
von Forrest Gump
Also wenn ich mod_rewrite richtig verstanden habe, dann müsstest du deine Frage doch eigentlich andersherum formulieren, und zwar so:
aus
soll werden
Das heißt, den Link, welchen der User anklickt und auch im Browser sieht, und auch die Anfrage, welche an den Server gesendet wird ist
http://domoin.nic/mustermann.html.
Der Server soll die Anfrage intern ändern, und das ist doch die Aufgabe von mod_rewrite, in
http://domain.nic/page.php?id=123.
Das würde heißen, dass mod_rewrite von "
mustermann" auf "
123" schließen müsste. Wie sollte das gehen?
Oder steh ich jetzt auf'm Schlauch?
Gruß Forrest
Verfasst: 11.10.2007 13:23
von fR33$tyler
ne du siehst das richtig...
als Bsp. noch mal die Forumsurl hier:
http://www.musiker-board.de/vb/technik-modifikationen-diy/237004-roehrentausch-bei-einem-laney-el34-topteil-incl-bias-angleichen.html
da hat die Kategorie ein Verzeichniss als Name "technik-modifikationen-diy" dann kommt der Thread (schätz ich mal) "237004" ein Trennzeichen "-" und der Name des Threads "roehrentausch-bei-einem-laney-el34-topteil-incl-bias-angleichen" und zu guter letzt ".html"
d.h. Mod Rewrite sollte hier warsch. grob gesagt
in
dann
in
umwandeln und
Code: Alles auswählen
roehrentausch-bei-einem-laney-el34-topteil-incl-bias-angleichen
ignorieren
schätz ich mal...
Verfasst: 11.10.2007 18:22
von Forrest Gump
Die threadID 237004 reicht doch aus um auf die Datenbank zuzugreifen und sämtliche Daten herauszuholen, z.B. Forums ID, Verfasser usw.
ps ich schreib dir noch ne PM
Gruß Forrest
Verfasst: 12.10.2007 15:15
von fR33$tyler
wärst du so nett, mir mal die URL oben als Mod rewrite Beispiel zu posten?
(dass der apache den "überflüssigen Teil im Link ignoriert")
grüßle
Verfasst: 12.10.2007 15:58
von Forrest Gump
Ich kann's mal probieren, aber ohne Gewähr, ich hab leider keine Zeit es auch auszuprobieren und ich kenn mod_rewrite selber erst seit ein paar Tagen.
Vor allem bei dem Anfang ^.*/.*/ bin ich mir unsicher, ob man das überhaupt benötigt, vielleicht reicht hier auch ^.* Sieh am besten mal hier nach:
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html und sag mir Bescheid ob's richtig ist.
Forrest
Verfasst: 14.11.2007 16:28
von fR33$tyler
Forrest Gump hat geschrieben:Ich kann's mal probieren, aber ohne Gewähr, ich hab leider keine Zeit es auch auszuprobieren und ich kenn mod_rewrite selber erst seit ein paar Tagen.
Vor allem bei dem Anfang ^.*/.*/ bin ich mir unsicher, ob man das überhaupt benötigt, vielleicht reicht hier auch ^.* Sieh am besten mal hier nach:
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html und sag mir Bescheid ob's richtig ist.
Forrest
Sorry für die lange Antwortzeit.. aber zieh grad nach PHP5 und MySql 5 um... da muss ich erst mal alle Scripte anpassen etc... also bin noch dran ^^
Verfasst: 17.01.2008 18:01
von fR33$tyler
ich habs... ^^
Bin selber drauf gekommen.. hätt ich auch echt früher drauf kommen können.. aber hab zu kompl. gedacht
Man irgnoriert einfach den 2ten Wert...
Code: Alles auswählen
RewriteRule ^beispiel-([1-9][0-9]*)-([A-Za-z0-9-]*).html index.php?show=beispiel&id=$1
Und den Link setzt man so zusammen
$bespieltitel = aus der Datenbank ne Abfrage mit z.B. Newstitel
Umlaute & Sonderzeichen ersetzten im $bespieltitel
Dann ist der Link:
beispiel-$id-$bespieltitel.html
yeah...
s geht au no:
http://www.dietle.de/ (siehe unten links "latest News")
juhuuuuuu
Verfasst: 18.09.2008 08:20
von fR33$tyler
Dank dem Tip von Marco gibts hier noch eine wichtige Verbesserung/Lücke.
Ich trag mal noch mein update nach, da wohl doch viele diesen Tread versuchen umzusetzen.
Kurzes Warum: Jeder "nette Mensch" kann die URLs faken und z.B. anstelle der orginalen Links "
www.domain.de/beispiel-111-ich-bin-der-text.html" in nem Forum posten "
www.domain.de/beispiel-111-ich-bin-ein-boeser-text.html"!
Nettes Beispiel was damit passieren kann gibts am Beispiel Freenet auf
Cyb´s Blog zu lesen (echt lesenswert)
Lösung:
Code: Alles auswählen
RewriteRule ^beispiel-([1-9][0-9]*)-([A-Za-z0-9-]*).html index.php?show=beispiel&id=$1&urlpruefung=$2
PHP Seitig: die $urlpruefung überprüfen ob es auch so in der Datenbank steht
Viel Erfolg damit und Danke an Marco für den Tip.