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" :o

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)

:idea:

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

Code: Alles auswählen

RewriteRule Pattern Substitution [flags]


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

Code: Alles auswählen

http://www.modrewrite.de/foren/viewtopic.php?p=18897


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

Code: Alles auswählen

http://domoin.nic/mustermann.html

soll werden

Code: Alles auswählen

http://domain.nic/page.php?id=123

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

Code: Alles auswählen

technik-modifikationen-diy
in

Code: Alles auswählen

forumID0-9


dann

Code: Alles auswählen

237004
in

Code: Alles auswählen

threadID=237004
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.

Code: Alles auswählen

RewriteRule ^.*/.*/([0-9]+)-.*\.html$ index.php?id=$1


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.

Code: Alles auswählen

RewriteRule ^.*/.*/([0-9]+)-.*\.html$ index.php?id=$1


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 :roll:

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. :wink: