url-Name aus der DB dynamisch generieren?!

Eines der wichtigsten Anwendungsgebiete von mod_rewrite ist das umschreiben von dynamischen in statische URLs um "suchmaschinenfreundliche URLs" zu erzeugen. Aber was ist besser fürs Ranking? http://www.url.com/12_2.htm, http://www.url.com/url,12,2.htm oder doch lieber http://www.url.com/12/2/url/ Fragen zum URL-Design werden hier diskutiert.

Moderator: Super-Mod

url-Name aus der DB dynamisch generieren?!

Beitragvon fR33$tyler » 09.10.2007 16:34

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
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14

Beitragvon Forrest Gump » 10.10.2007 17:45

Generiere doch den HTML link so, dass der Name darin vorkommt. So in etwa wie <a href="test-{$name0-{$id}.html"></a>

Gruß Forrests
Forrest Gump
.
.
 
Beiträge: 17
Registriert: 10.10.2007 12:50

Beitragvon fR33$tyler » 11.10.2007 07:45

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 :?:
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14

Beitragvon Forrest Gump » 11.10.2007 10:34

Code: Alles auswählen
RewriteRule Pattern Substitution [flags]


aus dem ersten Klammerpaar () des Patterns.

Welche Struktur haben denn die Links, welche die Anfrage starten?
Forrest Gump
.
.
 
Beiträge: 17
Registriert: 10.10.2007 12:50

Beitragvon fR33$tyler » 11.10.2007 10:53

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...
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14

Beitragvon Forrest Gump » 11.10.2007 11:20

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
Forrest Gump
.
.
 
Beiträge: 17
Registriert: 10.10.2007 12:50

Beitragvon fR33$tyler » 11.10.2007 13:23

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...
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14

Beitragvon Forrest Gump » 11.10.2007 18:22

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
Forrest Gump
.
.
 
Beiträge: 17
Registriert: 10.10.2007 12:50

Beitragvon fR33$tyler » 12.10.2007 15:15

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
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14

Beitragvon Forrest Gump » 12.10.2007 15:58

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
Forrest Gump
.
.
 
Beiträge: 17
Registriert: 10.10.2007 12:50

Beitragvon fR33$tyler » 14.11.2007 16:28

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 ^^
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14

Beitragvon fR33$tyler » 17.01.2008 18:01

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
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14

Beitragvon fR33$tyler » 18.09.2008 08:20

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:
fR33$tyler
.
.
 
Beiträge: 29
Registriert: 20.07.2006 13:14


Zurück zu URL-Design

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron