Portal > Foren > PHP > PHP-Programmierung > Saubere URLs für News wie selektieren?
Antwort
 
Themen-Optionen
Alt 04.07.2006, 08:48 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard Saubere URLs für News wie selektieren?

Ihr kennt ja solche URLs wie z.b. bei Wordpress
domain.com/news/2006/01/01/news-thema

Für die News auf meiner Page möchte ich das auch so machen mit .htaccess allerdings ist da nun ein Problem aufgetreten

früher ging es so news.php?id=1
ich kann es lediglich so ändern domain.com/news/1

Jetzt ist es aber so das in den optimierten URLs die NewsID nicht mehr drin ist sodass ich die passenden News nicht mehr selektieren kann. Wie könnte man das lösen?

Eine Idee ist mir gekommen das man neben dem News Titel noch eine Spalte "seo Titel" macht wo dann der Suchmaschinen optimierte Titel drinsteht. Anhand dessen kann man wie bei einem Primärschlüssel selektieren.

Oder gibt es noch andere Möglichkeiten die richtigen News zu selektieren ohne die ID mitzuliefern?
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 09:12 Nach oben    #2
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

wo ist das problem ID und titel in der leiste zu haben ? mein blog arbeitet so allerdings mache ich das php-seitig, sprich htaccess leitet alle anfragen an mein php-system weiter und das nimmt die aufgerufene URL auseinander. ausserdem stehen dir ja in der htaccess auch reguläre ausdrücke zur verfügung, also auch dort kannst du die id aus der zeichenkette rausbekommen, ich versteh dein problem nicht, ausserdem warum muss es denn news.php?id=1 sein ?
es ginge doch auch: news.php?id=name-der-news wobei man hier halt auf richtiges encoden und decoden achten muss!

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 10:03 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Na ja ich wollte die ID halt nich in der Zeile drin haben ganz einfach.

Es geht doch darum das ich in der optimierten URL einen Wert haben muss der es ermöglicht über die php Seite die richtigen News aus der DB zu selektieren.

Derzeit läuft das bei mir über news.php?id=1
Ich gehe mal davon aus das ohne ID in der Adresse zu machen.
Wenn ich nun den Newstitel als Schlüssel benutze muss ich doch den News Titel manipulieren, einen Link draus machen wo jemand draufklickt.
(Sonderzeichen raus, Leerzeichen zu Binderstriche, etc.)
<a href="news/meine-news-von-heute">

Aber ich kann doch aus dieser URL nicht den Originaltitel wiederherstellen und dann den korrekten Newseintrag selektieren. Ich müsste doch den optimierten Newstitel zusammen mit dem richtigen Titel speichern.

Das alles an ein PHP System weiterzuleiten fände ich auch besser. Wie läuft das denn bei dir ähnlich wie bei dem Dr. Web Tutorial?

Geändert von ex³ (04.07.2006 um 10:05 Uhr).
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 10:20 Nach oben    #4
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.203
Standard

Zitat:
Zitat von ex³
ähnlich wie bei dem Dr. Web Tutorial?
kannst du dazu bitte nen link nachreichen?

danke.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 10:27 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Du speicherst die URLs in einer Datenbank, liest dann die entsprechende urlID aus, welche einem bestimmten Datensatz der Tabelle news zugeordnet ist. Somit kannst du mit einer URL ohne ID eine gewisse Nachricht auslesen.

Meinst du sowas?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 10:37 Nach oben    #6
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Hatte mich auch auf die Suche nach dem Dr. Web Tutorial begeben aber ich finde es irgendwie grade nicht. Die haben mit .htaccess alles auf eine File geleitet und dann eine $_SERVER Variable ausgelesen und mit explode zerlegt dann kann man den Rest inlcuden.

Ah ja hier ist es http://www.drweb.de/suchmaschinen/su...nen-urls.shtml

@Ben

Ja so ungefähr ich hab ne Tabelle und da steht dann sowas drin
newstitel "Meine News von Heute!"
newstitelopt "meine-news-von-heute"

Der optimierte newstitel ist dann der Schlüssel zum selektieren. Was meines Meinung nicht grade ne tolle Methode ist.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 10:38 Nach oben    #7
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.203
Standard

Zitat:
Zitat von ex³
Danke!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 10:41 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Zitat:
Zitat von ex³
Der optimierte newstitel ist dann der Schlüssel zum selektieren. Was meines Meinung nicht grade ne tolle Methode ist.
Wenn du das so nicht machen willst, dann brauchst du eine ID.

Deine Entscheidung!

Btw. deine URL-Tabelle braucht eine ID, damit du diese dann in der Tabelle "news" (oder so) verwenden kannst. Die Spalte "newstitle" gehört nicht in die Tabelle. Beschäftige dich mal mit Normalisierung!


Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 10:52 Nach oben    #9
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Keine Ahnung was du mit URL Tabelle meinst. Ich habe eine News tabelle in denen die beiden Newstitel drinstehen mehr nicht. Ich würde nur die optimierten Titel speichern und keine kompletten URLs. Datenbanken nicht so deine Stärke, wie?
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 13:46 Nach oben    #10
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

Betreffs PM von ex3:

Zitat:
Zitat von ex³
Hi Robo!

Du hattest geschrieben deine seo urls mit ids laufen über ein php script. Kannst du mir bitte ansatzweise irgendwie kurz beschreiben wie du da bei vorgehst?

ich geh jetzt einfach mal von meinem system unter www.robo47.net aus, das system ist im groben so aufgebaut, dass ich ein modul habe: blog
und seine urls, die setzen sich aus id und seo-optimiertem namen zusammen:

www.robo47.net/module/seo-optimierter-name

der blog unterscheidet sich hier, weil es durchaus passieren kann, dass gleiche seo-optimierte namen irgendwann vorkommen, wird hier zusätlich mit einer ID gearbeitet

http://www.robo47.net/blog/eintragid...timierter-name

beim aufruf z.b. dieser url:
http://www.robo47.net/blog/34-14-days-remaining#top

geht mein system so vor:

die .htaccess leitet alle anfragen bis auf ein paar ausnahmen direkt an die index.php weiter:

Code:
RewriteEngine on
Options +FollowSymlinks
RewriteRule !(favicon.ico|robots.txt|info.php) index.php [L]
Errordocument 404 /index.php?a=404
im System nehme ich die durch mod_rewrite erstellte URL auseinander:

PHP-Code:
// mod_rewrite-Daten auswerten und zwischenspeichern
if (!isset($_SERVER['REDIRECT_URL']))
{
    
$_SERVER['REDIRECT_URL'] = '/';
}
$querystring substr($_SERVER['REDIRECT_URL'],1);
if(isset(
$_SERVER['REDIRECT_URL']) and strlen($querystring) > 0)
{
    
$queryarray explode('/',substr($_SERVER['REDIRECT_URL'],1));
    
$_GET['a'] = $queryarray[0];
    
$GLOBALS['queryarray'] = $queryarray;
}
else
{
    
$_SERVER['REDIRECT_URL'] = '';
    
$_GET['a'] = 'blog';
    
$GLOBALS['queryarray'] = array();
    
$GLOBALS['queryarray'][0] = 'blog';

dann nachdem mein system entschieden hat, an welches modul das ganze weitergegeben wird (wir gehen hier jetzt mal vom blog aus) wird die id und die seo-optimierte URL überprüft, damit es nicht zu double-content kommt:

preg_match_all('~^([0-9]+)\-.*?$~',$GLOBALS['queryarray'][1],$matches);

als erstes schauen ob eine id gefolgt von was anderem vorhanden ist (seo-optimierter-name)

dan wird in der datenbank der zur ID passenden eintrag abgeholt, wenn er nicht existiert wird ein 404 ausgegeben mit info, dass der eintrag nicht oder nicht mehr existiert, wenn die ID existiert, wird überprüft pb der seo-optimierte name stimmt, stimmt dieser nicht, wird mittels header 301 auf die richtige url weitergeleitet, so verhindert man, dass suchmaschinen doppelte urls finden, weil sich jemand beim verlinken vertippt hat oder ähnliches UND ich kann jederzeit nachträglich die seo-url selbst verändern ohne dass es zu einem 404 kommt.

beispielcode fürs weiterleiten:
PHP-Code:
            header('HTTP/1.1 301 Moved Permanently');
            
header('Location: http://'.$_SERVER['HTTP_HOST'].'/blog/'.$id.'-'.$headline); 
bei den anderen modulen, tutorial, reviews und diverses geht das ganze ohne ID vonstatten, weil es hier nur einzelne Einträge gibt die einen eindeutigen namen haben.

jow denke damit hab ich gaanz grob erklärt wie ich das bei mir realisiert habe, wenn noch fragen sind, als her damit. Die Ids stören in den URLs ja nicht und so kann man trotzdem seine URLS optimieren und hat den vorteil topics ändern zu können, ohne dass eben seiten nicht mehr auffindbar sind, die 301 wirken hier sehr gut auf suchmaschinen, weil sie dann im normalfall die alte seite aus dem index kicken und die neue aufnehmen, wenn sie auf so einen link stoßen.

//Edit
jow die seo-urls erstellt mein system quasi von selbst, die funktion ist noch nicht ausgereift und vor allem nicht wirklic htauglich für alle sonderzeichen, aber da mein system step-by-step erweitert wird kann ich damit leben. die funktion wird irgendwann wohl einfach ein array enthalten mit allen entsetzungen, der code ist also bis jetzt noch eher quälcode der noch zu optimieren ist, aber einfach im einsatz bei mir erweitert und verbessert wird, klammern sind eigentlich noch auf der liste dessen was ersetzte werden sollte und im endeffekt werde ich wohl dann auch noch mehrfache - durch einen einzelnen ersetzen lassen, was ja dank der 301-funktion zu keinem problem führt, weil user genauso wie suchmaschinen immer zum richtigen eintrag weitergeleitet werden. als $string übergebe ich immer den von mir für einen blogeintrag erstellten titel ein.

PHP-Code:
    private function validateHeadline($string)
    {
        
$string str_replace(' ','-',$string);
        
$string str_replace('ä','ae',$string);
        
$string str_replace('ö','oe',$string);
        
$string str_replace('ü','ue',$string);
        
$string str_replace('ß','ss',$string);
        
$string str_replace('Ä','Ae',$string);
        
$string str_replace('Ö','Oe',$string);
        
$string str_replace('Ü','Ue',$string);
        
$string str_replace('&',' und ',$string);
        
$string str_replace('/','-',$string);
        
$string str_replace('\\','-',$string);
        
$string str_replace('$','Dollar',$string);
        
$string str_replace('€','Euro',$string);
        
$string str_replace('?','',$string);
        
$string str_replace('\'','',$string);
        
$string str_replace('"','',$string);

        return 
$string;
    } 
mfg
robo47

Geändert von robo47 (04.07.2006 um 13:51 Uhr).
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2006, 13:52 Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Wow das ist toll. Vielen Dank dafür so werd ich es auch machen.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.07.2006, 10:23 Nach oben    #12
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

da ich seit ich hier codebrocken gepostet habe aufrufe alla: http://www. robo47 .net/?queryarray=23
http://www. robo47 .net/?include=blog/1.html
http://www. robo47 .net/?queryarray[0]=blog&queryarray[1]=5


und soweiter habe
-> register_globals ist bei mir off und ich include auch nix statisches


/edit

habs mal entlinkt, weil da irgendwie jeder der das hier gelesen hat wohl draufgeklickt hat
mfg
robo47

Geändert von robo47 (05.07.2006 um 13:57 Uhr).
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.07.2006, 10:27 Nach oben    #13
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Probieren kann mans ja mal.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.11.2006, 13:08 Nach oben    #14
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Hi,
so ganz habe ich nicht verstanden, wie du das realisierst.
Zitat:
Zitat von robo47 Beitrag anzeigen
wird überprüft pb der seo-optimierte name stimmt, stimmt dieser nicht, wird mittels header 301 auf die richtige url weitergeleitet, so verhindert man, dass suchmaschinen doppelte urls finden
Die Funktion validateHeadline() macht ja eigentlich etwas anderes. Die erstellt ja den "seo-freundlichen Titel" im URL.

Wenn du nun aber einen Titel à la "Die finale Version von PHP 5.2.0 ist veröffentlicht" hast, würde ja z.B. in der Adresszeile folgende URI stehen

"34,die-finale-version-von-php-5.2.0-ist-veroeffentlicht"

Jut, wie prüfst du denn jetzt, ob der Titel zur ID passt? Hast du den Titel persistent abgespeichert oder wie?
Weil die Funktion validateHeadline() umzukehren dürfte nicht so einfach möglich sein.

Danke für die Erläuterung.
Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.11.2006, 15:09 Nach oben    #15
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Hi,
so ganz habe ich nicht verstanden, wie du das realisierst.
Zitat:
Zitat von robo47 Beitrag anzeigen
wird überprüft pb der seo-optimierte name stimmt, stimmt dieser nicht, wird mittels header 301 auf die richtige url weitergeleitet, so verhindert man, dass suchmaschinen doppelte urls finden
Die Funktion validateHeadline() macht ja eigentlich etwas anderes. Die erstellt ja den "seo-freundlichen Titel" im URL.

Wenn du nun aber einen Titel à la "Die finale Version von PHP 5.2.0 ist veröffentlicht" hast, würde ja z.B. in der Adresszeile folgende URI stehen

"34,die-finale-version-von-php-5.2.0-ist-veroeffentlicht"

Jut, wie prüfst du denn jetzt, ob der Titel zur ID passt? Hast du den Titel persistent abgespeichert oder wie?
Weil die Funktion validateHeadline() umzukehren dürfte nicht so einfach möglich sein.

Danke für die Erläuterung.
Grüße, Ben.
gleiches verfahren wie bei passwortüberprüfung wenn ich nur md5-hashes habe, ich nehme die id, ruf den datensatz ab, nehme den titel, lass die funktion drüberlaufen und vergleiche es mit dem was als titel in der URL steht.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.11.2006, 12:32 Nach oben    #17
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Meine Zeit gebietet es mir leider nicht, die letzten 5 Beiträge komplett zu lesen, daher einfach mal so die Frage in den Raum geworfen: Was haltet ihr von der Alternative, die ID als SubDomain zu übergeben? Sprich anstatt http://www.domain.de/news/1/News_Titel halt http://1.domain.de/news/News_Titel ? Technisch ist das machbar, fraglich ist halt nur, ob jemand auf diese Art der Formatierung steht!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.11.2006, 12:53 Nach oben    #18
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

sobald ich irgendwas als subdomain habe, gehört rein suchmaschinentechnisch der kram zu ner komplett anderen domain, das gleiche gilt ja dann auch für cookies, die erlaubnis von noscript ob man js aktiviert hat .....

wäre meiner meinung nach fatal.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.11.2006, 17:44 Nach oben    #19
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Hmm... OK, dazu kenne ich mich zu wenig mit Suchmaschinenarbeitsweisen aus, aber Cookies kannst du für domain.de setzen und meines Wissens nach arbeiten die dann auch für a.domain.de, b.domain.de, etc.!? Oder irre ich mich da? *kratzamkopf*
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.11.2006, 18:44 Nach oben    #20
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
Hmm... OK, dazu kenne ich mich zu wenig mit Suchmaschinenarbeitsweisen aus, aber Cookies kannst du für domain.de setzen und meines Wissens nach arbeiten die dann auch für a.domain.de, b.domain.de, etc.!? Oder irre ich mich da? *kratzamkopf*
Ja, da muss ich dir zustimmen, ich glaubich hab zu sehr an meinen firefox gedacht
wenn ich einer domain cookies erlaube zu setzen gilt das auch wieder nur für die domain, nicht für die subdomain.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zend Framework - Probleme mit Zend_Controller_RewriteRouter bzw. Form der URLs Ben PEAR, PECL und Frameworks 12 24.12.2006 17:17
Seite statisch vorerstellen für bessere URLs ex³ PHP-Programmierung 12 18.01.2006 11:21


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:13 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2