[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Rexseo, rewriting der Parameter und Kategorie als Trenner - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Thomas-S
Beiträge: 43
Registriert: 1. Jun 2007, 09:30
Wohnort: Forst
Kontaktdaten: Website

Rexseo, rewriting der Parameter und Kategorie als Trenner

18. Okt 2012, 13:14

ich stolpere gerade über eine Standard- Aufgabe oder vielleicht denke ich in die falsche Richtung:

Ich benutze REXSEO zum Umschreiben der URL's.
Das funktioniert für die Redaxo- eigene Struktur wunderbar.
Jetzt habe ich ein Projekt, wo in einem Bereich die Daten über ein eigenes Addon aus der Datenbank geholt werden.
Dazu gibt es z.B. die üblichen Parameter "id" und "name"

"lexikon?id=2384&name=hans+wurst"

mit Parameter Rewrite wird daraus: "lexikon/++/2384/hans+wurst"

Kann man den Rexseo Parameter Rewrite nur für einen Teil der Webseite (z.B. eine Kategorie) einschalten und wenn möglich das Trennzeichen ++ weglassen, da der Name der (einmaligen) Kategorie als Trenner erkannt werden kann? Also Kategorie = lexikon und url= lexikon/id/name, wobei der Name zum Abruf der Daten egal ist (nur für SEO).

Wie das Umschreiben der URL über den REXSEO_PATHLIST_CREATED geht, hab ich soweit verstanden.
Mein Problem ist, dass es sich diesmal um 200 000 Datensätze handelt. Kann mir nicht vorstellen, die in eine Pathlist zu schreiben.

Das extrahieren der Parameter aus der URL kann man im entsprechenden Artikel natürlich selbst machen aber ich müsste auch alle URLs dorthin ohne rex_getURL zusammenbauen. Ist das der übliche Weg?

Vielleicht sehe ich das wieder zu kompliziert und es ist ganz einfach, bitte mal um einen Wink ;-)

mit Dank im Voraus
Thomas

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

18. Okt 2012, 16:05

Thomas-S hat geschrieben:Kann man den Rexseo Parameter Rewrite nur für einen Teil der Webseite (z.B. eine Kategorie) einschalten ..
Nein.
Thomas-S hat geschrieben:.. 200 000 Datensätze handelt. Kann mir nicht vorstellen, die in eine Pathlist zu schreiben.
Yup, der Weg über die pathlist ist bei der Menge nicht gangbar.. der RAM Bedarf wäre ziemlich sicher zu hoch, und selbst wenn der Server das hergäbe, wärs imho nicht sinnvoll.
Thomas-S hat geschrieben:Das extrahieren der Parameter aus der URL kann man im entsprechenden Artikel natürlich selbst machen aber ich müsste auch alle URLs dorthin ohne rex_getURL zusammenbauen. Ist das der übliche Weg?
Es gibt keinen üblichen Weg.. ;) Ich würde in dem Fall folgendes mal probieren:

Ein plugin bauen (Rexseo 1.5.x), welches sich beim EP URL_REWRITE einhängt.. im EP auf die article_id checken, und wenn es die deines DB Ausgabe Artikels ist, anhand der Parameter deinen eigenen rewrite basteln.. da das Plugin vor dem Rexseo Haupcode (sprich dessen rewrite) ausgeführt wird, macht Rexseo dann keinen weiteren rewrite mehr, weil in URL_REWRITE schon einer gemacht wurde.
Für die Auflösung der URL würde ich - da nicht über die pathlist möglich - den EP REXSEO_ARTICLE_ID_NOT_FOUND nehmen.. dort zerlegst du die unbekannte URL (sofern sie deinem Schema entspricht), und ermittelst article_id und params..

Das ist jetzt ungetestet/theoretisch, aber ich denke so oder ähnlich sollte das eigentlich klappen..
vg, Jan

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

18. Okt 2012, 21:58

Ein relativ einfacher Weg wäre, sich einfach selbst um das Rewriting zu kümmern.

Du schreibst dir einfach eine Rewriteregel:

Code: Alles auswählen

RewriteRule lexikon/(\d+)/([^/]+)/? lexikon?id=$1&name=$2
Wenn die Namen eindeutig definiert sind, kannst du die ID sogar noch weglassen:

Code: Alles auswählen

RewriteRule lexikon/([^/]+)/? lexikon?name=$1
Jetzt musst du dich zwar selbst um den Aufbau der URLs kümmern, das dürfte aber bei solch einer einfachen Struktur relativ einfach sein.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Thomas-S
Beiträge: 43
Registriert: 1. Jun 2007, 09:30
Wohnort: Forst
Kontaktdaten: Website

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

18. Okt 2012, 22:07

@jeandeluxe, danke für den Tipp!

habe mich in URL_REWRITE eingeklinkt und schreibe die URL um, wenn die Artikel_ID = 6 ist.

einfache Variante aber funktioniert schon:

Code: Alles auswählen

function special_url($params) {
  $urlparams = '';
  // url nur umschreiben wenn article_ID = 6
  if ($params['id']=='6') {
    // params liegen nicht als array vor, müssen separiert werden
    $paramstring = split('&', $params['params']);
    foreach ($paramstring as $value) {
      if (substr($value, 0, 3) == 'id=') $urlparams .= (substr($value, 3)).'/';
      if (substr($value, 0, 5) == 'name=') $urlparams .= (substr($value, 5)).'/';

    }
    //  params an url anhängen
    return 'lexikon/'.$urlparams;
  }
}
$params = '';
rex_register_extension('URL_REWRITE','special_url',$params);
nochmal zur Auflösung der URL:
Für die Auflösung der URL würde ich - da nicht über die pathlist möglich - den EP REXSEO_ARTICLE_ID_NOT_FOUND nehmen.. dort zerlegst du die unbekannte URL (sofern sie deinem Schema entspricht), und ermittelst article_id und params..
wenn ich "lexikon/1355/lala" eingebe und in rexseo Einstellungen "artikel mit ähnlichster URL anzeigen" eingestellt habe, lande ich schon auf der lexikon- Seite und könnte die URL im Modul des Artikels zerlegen.
Wäre es trotzdem besser über REXSEO_ARTICLE_ID_NOT_FOUND zu gehen?

@Xong
wenn ich die URLs mit der Methode oben umschreibe und die Auflösung über Deine RewriteRule mache? Die parameter Urls mit ?id=xxx&name=xxxx funktionieren ja noch....

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

18. Okt 2012, 23:17

Thomas-S hat geschrieben:wenn ich "lexikon/1355/lala" eingebe und in rexseo Einstellungen "artikel mit ähnlichster URL anzeigen" eingestellt habe, lande ich schon auf der lexikon- Seite und könnte die URL im Modul des Artikels zerlegen. Wäre es trotzdem besser über REXSEO_ARTICLE_ID_NOT_FOUND zu gehen?
Wenn du ähnlichste URL generell benutzten willst bietet sich xongs Lösung für den resolve eher an. Zum einen läufst du mit ähnlichster URL Gefahr evtl. mal nicht im gewünschten Artikel rauszukommen, zum anderen ist das dann nicht sonderlich performant.. erst Rexseo rumsuchen lassen, und dann nochmal im eigenen code den resolve abfeiern.. dann lieber gleich die Umleitung incl. Auflösung der params nehmen.. so wie xong das skizziert hat.
vg, Jan

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

18. Okt 2012, 23:42

Der Vollständigkeit halber: es gäbe noch nen Weg den standard rewrite der params zu manipulieren: via dem EP REXSEO_POST_REWRITE .. dort bekommt man im EP sowohl das Ergebnis von Rexseos Bemühungen, als auch die Rohdaten. Die Abkürzung mit dem Vorwegnehmen des rewrites via URL_REWRITE ist performanter, aber es mag Fälle geben wo dieser EP von Vorteil ist..
vg, Jan

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

19. Okt 2012, 17:47

http://googlewebmastercentral.blogspot. ... -urls.html
http://www.youtube.com/watch?v=M6TBM828clM

Wenn du 2 Parameter hast wird Google die genausogut indizieren/ ranken/ whatever wie eine pseudo-pfad URL mit einer numerischen ID drin. Wär schon traurig, wenn die dazu nicht in der Lage wären. Deshalb würde ich mir den Wiggel schenken, da tust du keinem einen Gefallen mit.

Thomas-S
Beiträge: 43
Registriert: 1. Jun 2007, 09:30
Wohnort: Forst
Kontaktdaten: Website

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

19. Okt 2012, 18:21

ich bräuchte noch einen kleinen Tipp.

die Rule von Xong funktioniert nur, wenn ich die Genauigkeit von REXSEO auf "Artikel mit ähnlichster URL" stelle.
RewriteRule lexikon/(\d+)/([^/]+)/? lexikon?id=$1&name=$2
Bei der Ausgabe von $_SERVER sehe ich erst mal nicht woran es liegt, der REDIRECT_QUERY_STRING ist korrekt. Spielt rexseo noch eine Rolle dabei?

Ich könnte in der Rule auf die artikel ID weiterzuleiten, das funktioniert, aber dann muss ich in rexseo den Aufruf via article_id zulassen ;-(
RewriteRule lexikon/(\d+)/([^/]+)/? index.php?article_id=6&au_ID=$1&name=$2
bin mir auch noch nicht sicher ob ich diese Rule in der htaccess an der richtigen Stelle habe. Wenns zu weit unten eingefügt wird, gibt er manchmal die .js und .css Files als Text aus.

Thomas-S
Beiträge: 43
Registriert: 1. Jun 2007, 09:30
Wohnort: Forst
Kontaktdaten: Website

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

19. Okt 2012, 22:18

sorry, hab das eben erst kapiert.
"Genauigkeit" bedeutet ja, dass die URL mit der URL in der Pathlist verglichen wird, was bei meiner generierten URL natürlich nicht der Fall ist.
Also bleibt nur entweder Genauigkeit mit "ähnlichster" (wobei ich da nicht weiß was das für "Nebenwirkungen" hat) oder redirect auf article_id und diese im "Aufruf via article_id" zulassen.

Die Möglichkeit eines Platzhalterzeichens am Ende einer Custom URL eines Artikels wäre super ;-)

danke für die Hilfe
Thomas

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

20. Okt 2012, 08:57

Hi Thomas,

eigentlich müsste es schon reichen, wenn du einfach den Slash hinzufügst, damit auf die exakte URL weitergeleitet wird:

Code: Alles auswählen

RewriteRule lexikon/(\d+)/([^/]+)/? lexikon/?id=$1&name=$2
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Thomas-S
Beiträge: 43
Registriert: 1. Jun 2007, 09:30
Wohnort: Forst
Kontaktdaten: Website

Re: Rexseo, rewriting der Parameter und Kategorie als Trenne

22. Okt 2012, 09:54

Hallo Xong,
vielen Dank für Deinen Support (fällt selbst mir als sporadischem Besucher hier im Forum immer wieder auf)
eigentlich müsste es schon reichen, wenn du einfach den Slash hinzufügst, damit auf die exakte URL weitergeleitet wird
Das funktioniert leider nicht.Ich glaube da kannst Du eintragen, was Du willst. Denn REXSEO vergleicht ganz zu Beginn der rewrite-Klasse die $_SERVER['REQUEST_URI'] mit der Pathlist. Vorher wird sie noch nach ? und # gesplittet. In der Pathlist steht /lexikon aber die REQUEST_URI lautet trotz rewrite-Rule /lexikon/xxx/xxxxx. Deshalb auch die Sache mit dem "Abtrenner" für Parameter.

Soweit ist mir das klar. Jetzt gibt es wieder verschiedene Möglichkeiten.
- Aufruf per article_id grundsätzlich zulassen, aber dafür sorgen, dass die canonical url in Metatags immer eine url mit umgeschriebenen Pfad und inkl. Parametern ist.
- Die Klasse erweitern und
- - den Vergleich mit der Pathlist abfangen und diesen Path als Ausnahme behandeln
- - Aufruf via article_id für diesen Pfad zulassen
- ?

Viele Grüße
Thomas

Zurück zu „Allgemeines [R4]“