AMR: Frage zu Routing-Definitionen

Gesperrt
procon
Beiträge: 80
Registriert: So 27. Jan 2013, 13:24
Wohnort: Lennestadt
Kontaktdaten:

AMR: Frage zu Routing-Definitionen

Beitrag von procon » Do 31. Jan 2013, 13:50

Hallo zusammen,

ich versuche gerade herauszubekommen, ob sich die Routing-Definitionen im AMR-Plugin irgendwie automatisieren lassen, komme dabei aber nicht wirklich weiter.
Ziel soll es sein, im Portal karriere-suedwestfalen.de direkt auf die verschiedenen Unternehmen zu verlinken, d.h. wer karriere-suedwestfalen.de/firma eingibt, soll direkt beim Unternehmensporträt der jeweiligen Firma landen. Mit manuell (im AMR-Backend) eingerichteten Routing-Definitionen funktioniert das natürlich alles wunderbar, nun möchte ich dies jedoch dynamisch für alle Unternehmen (und auch künftige) einrichten.

Das Trickreiche an der Sache ist, dass es sich beim verwendeten System zwar um Contenido handelt, dieses jedoch stark mit eigenen DB-Tabellen und Modulen erweitert wurde, um z.B. die ganzen Unternehmensdaten zu verwalten.

Habe schon nach einer eventuellen DB-Tabelle gesucht, in der die Routing-Definitionen abgelegt werden, aber nichts gefunden. Ein Blick in die Dateistruktur des AMR-Plugins hat auch nicht geholfen, kann mir da jemand auf die Sprünge helfen? Man könnte zwar auch die htaccess ständig neu generieren und alle neuen Routingdefinitionen unten anhängen - eleganter ist es aber sicherlich, die bereits vorhandene Routing-Funktionalität zu nutzen. Ein 301-Header wird dabei nicht gesendet, oder?

Grüße
Dominik

Faar
Beiträge: 1460
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von Faar » Do 31. Jan 2013, 16:06

Das erinnert mich etwas an das Wordpress Plugin Redirection.
Das arbeitet aber auch nicht automatisch, jedoch listet es alle eingehenden Anfragen auf die kein Ziel haben. So kann man diese dann nehmen und per Mausklick als Redirect auf ein neues Ziel übernehmen.

Gerade in Bezug zu eingehenden Links die kein Ziel mehr haben, wäre im AMR Plugin so eine Liste eine feine Sache, denn man könnte damit einfach Links die noch irgendwo existieren aber deren Seiten gelöscht wurden, auf neue Seiten verweisen.
Für SEO ist das sehr brauchbar wenn man das alles in einem machen kann, statt das Tracking auszuwerten und alles manuell nach zu ziehen.

Eine .htaccess Redirect-Liste würde ich nicht einbauen wenn es anders geht, denn die Chance auf einen Fehler ist groß und durch irgendeinen Mist fehlt plötzlich die .htaccess oder wurde durch eine leere neue ersetzt.
Bei internen Redirect-Systemen ist das viel leichter und sicherer zu handhaben.

Sag mal xmurrix, wäre das möglich, eingehende Links die auf gelöschte Seiten verweisen, im AMR Plugin auflisten zu lassen, damit man sie dort gleich redirecten kann? 8)
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von xmurrix » Do 31. Jan 2013, 16:30

Hallo Dominik,

du hast meiner Meinung nach folgende Möglichkeiten:

Entweder erstellst du in der .htacess eine Regel, die alle ankommenden Anfragen auf ein Verzeichnis im Root umleitet

Code: Alles auswählen

RewriteEngine on 
RewriteRule ^([a-z0-9\-_\+]+)/$ front_content.php?firma=$1 [NC] [QSA] [L]
Dann werden alle Requests, die ein Verzeichnis in der Pfadangabe haben (also /autohaus-kurt/, /getraenke-mayer/), auf front_content.php?city=$1 [NC] umgeleitet. Nachteil ist, dass man hier nicht flexibel ist, also keine Unterseiten unterstützt werden.

Oder du änderst die Logik in der Klasse ModRewriteController (contenido/plugins/mod_rewrite/classes/class.modrewritecontroller.php), um solche Requests abzufangen. Ich würde in der Funktion execute() einfach prüfen, ob der vordere Teil der in der $this->_sIncommingUrl als Kategoriealias vorkommt. Falls ja, dann ist es eine Kategorie, dann nicht nichts machen. Falls nein, kannst du davon ausgehen, dass es es eine Firma ist.

Viel einfacher wäre es, wenn man in der URL eine eindeutige Kennung hat, z. B. in Form eines Prefixes, also also /firma/autohaus-kurt/, /firma/getraenke-mayer/. Dann könnte man alle Anfragen in der .htaccess umleiten

Code: Alles auswählen

RewriteEngine on 
RewriteRule ^firma/(.*)$ front_content.php?firma=$1 [NC] [QSA] [L]
Die Rewrite Beispiele sind nur als Ansatz gedacht, eventuell ist da etwas Feintuning nötig, wie z. B. das Setzen der RewriteBase ...

Ein flexibles Routing ist in AMR momentan nicht implementiert.

Gruß
xmurrix

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von xmurrix » Do 31. Jan 2013, 16:40

Faar hat geschrieben:..wäre das möglich, eingehende Links die auf gelöschte Seiten verweisen, im AMR Plugin auflisten zu lassen, damit man sie dort gleich redirecten kann?...
Klar, wäre das möglich. Diese Anfrage kam schon mehrfach im Forum. Allerdings muss man da einiges anpassen. Es ist nicht ganz ohne, man muss im Backend alle Änderungen verfolgen wie Artikel umbenennen/verschieben/löschen), Kategorien umbenennen/verschieben/löschen, das Verschieben ganzer Kategoriebäume, Änderungen an Plugineinstellungen, um alte URLs auf geänderte Artikel-/Kategorien zu linken.

Es ist eine große Änderung im Plugin, was ich bisher nicht angehen wollte und auch die Zeit dazu nicht hatte.

Seitdem das Plugin mittlerweile in die CONTENIDO Installation integriert ist, kann man gerne weitere Ideen der Community gemeinsam angehen.

Gruß
Murat

Faar
Beiträge: 1460
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von Faar » Fr 1. Feb 2013, 15:07

Hi Murat,

ich meinte das nicht in dieser Form, sondern dass nur von aussen eingehende Requests die sonst auf der 404 landen würden, in einer Liste gespeichert werden.
...das kann durchaus viel werden, denn ich habe im Wordpress-Blog bereits 6.244 Links.
Man sieht dann auch, ob jemand versucht hat zu hacken.
Die Anhänge hinter dem / verraten so einiges über die Absichten, wenn nach Scripten in Verzeichnissen gesucht wird, die es bei meiner Seite gar nicht gibt.
Manches sind wohl Hacker, weil sie blind nach bestimmten Schwachstellen/Programmen suchen, die es geben könnte.

Natürlich müsste dann eine Löschfunktion eingebaut werden oder ein Limit, wie lange die URLs aufbewahrt sein sollen.
Aber praktisch ist das schon, wenn man dann so einen Link hat, den anklicken kann und sagen, verlink mir das mal auf diese Seite.
Nach dem neuen verlinken würde dann dieser Link aus der Liste eingehender 404-Links gelöscht werden und dann in der Routing-Liste drin stehen.

VG,
Frank
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Faar
Beiträge: 1460
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von Faar » Do 13. Jun 2013, 13:43

Das Routing ist doch noch ein Buch mit sieben Siegeln.

/kategorie/>>>/kategorie/subkategorie/ funktioniert nicht.
/kategorie/>>> kategorie/subkategorie/ auch nicht.
/kategorie/>>>kategorie/subkategorie/seite.html auch nicht.
/kategorie/seite.html>>>kategorie/subkategorie/seite.html nur teilweise (zwei von drei gehen).

Warum geht beim letzteren eines nicht?

Die URLs sind so aufgebaut: domain.tld/kategorie/ oder domain.tld/kategorie/subkategorie/
Artikelname wurde nicht eingestellt, weil Kategorien als Kategorien und nicht als Seiten angezeigt werden sollten.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von xmurrix » Do 13. Jun 2013, 14:27

Faar hat geschrieben:Das Routing ist doch noch ein Buch mit sieben Siegeln.

/kategorie/>>>/kategorie/subkategorie/ funktioniert nicht.
/kategorie/>>> kategorie/subkategorie/ auch nicht.
/kategorie/>>>kategorie/subkategorie/seite.html auch nicht.
/kategorie/seite.html>>>kategorie/subkategorie/seite.html nur teilweise (zwei von drei gehen).

Warum geht beim letzteren eines nicht?...
Hier der Ausschnitt aus der Beschreibung des Routing:

Routing Definitionen für eingehende URLs. Pro Zeile eine Routing Definition wie folgt eingeben:

Code: Alles auswählen

# {eingehende_url}>>>{neue_url}
/eingehende_url/name.html>>>neue_url/neuer_name.html  (ACHTUNG: Falsch!!!)

# bestimmte eingehende url zur einer seite weiterleiten
/aktionen/20_prozent_auf_alles_ausser_tiernahrung.html>>>front_content.php?idcat=23

# request zum wwwroot auf eine bestimmte seite routen
/>>>front_content.php?idart=16
Hinweis:
  • Das Routing schickt keinen HTTP Header mit einer Weiterleitung zur einen anderen Seite, die Umleitung findet intern durch das Ersetzen der erkannten Eingangsseite gegen die neue Zielseite statt (Ersetzen der Artikel-/Kategorieid)
  • Eingehende URLs können auch nicht vorhandene Ressourcen (Kategorie, Artikel) sein,
    hinter der Ziel URL muss eine gültige Contenido-Seite (Kategorie/Artikel) liegen
  • Als Ziel URL kann sollte eine reale URL zur Kategorie/Seite angegeben werden, z. B. front_content.php?idcat=23 oder front_content.php?idart=34.
    Bei mehrsprachigen Auftritten sollte die Id der Sprache angehängt werden, z. B. front_content.php?idcat=23&lang=1
    Bei mehreren Mandanten im gleichen Verzeichnis sollte die Id des Mandanten angehängt werden, z. B. front_content.php?idcat=23&client=2
  • Die Zielurl sollte nicht mit '/' oder './' beginnen (falsch: /front_content.php, richtig: front_content.php)
Das erste Beispiel

Code: Alles auswählen

/eingehende_url/name.html>>>neue_url/neuer_name.html
ist wohl hier das Problem, man sollte nicht die neue Zielurl als Clean-URL angeben, sondern immer

Code: Alles auswählen

.../eingehende_url/name.html>>>front_content.php?idart=123
Also

Code: Alles auswählen

/kategorie/>>>front_content.php?idcat=123
/kategorie/>>>front_content.php?idart=123
/kategorie/seite.html>>>front_content.php?idart=123
...
Gruß
xmurrix

Faar
Beiträge: 1460
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von Faar » Mi 13. Nov 2013, 12:00

Kurze Frage noch (wegen aktuell):

Kann man beim Routing auch mit einer Kategorie /beispiel/>>>front_content.php?idcat=123 auch alle Unterkategorien abdecken wie /beispiel/kat/>>>front_content.php?idcat=124 usw.?
Gibt es eine Art Wildcard wie /beispiel/* oder /beispiel ohne Slash am Ende?

Manche haben ja hunderte Unterkategorien und da wäre es sehr mühsam, alles einzeln zu routen :cry:

Viele Grüße,
Frank
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von xmurrix » Mi 13. Nov 2013, 17:07

Hallo Faar,

die Routing-Definitionen unterstützen keine Wildcards, und es mah auch keinen Sinn, dort tausende Einträge zu machen. Das würde ich dann direkt in der .htaccess machen.

Gruß
xmurrix

Faar
Beiträge: 1460
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von Faar » Do 14. Nov 2013, 15:35

An die .htaccess kommen wir nicht dran, weil es die nicht gibt.
Das macht ein Rechenzentrum im http-conf, aber da kommen wir auch nicht dran, das geht nur mit Voranmeldung und Übermittlung eines gültigen .htaccess Eintrages ohne Fehler, sonst darf man wieder Tage oder Wochen warten, bis man das nächste offene Zeitfenster für solche Arbeiten bekommt.

Darum: AMR Routing rulez!
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von xmurrix » Do 14. Nov 2013, 17:04

Ich hatte mal damit angefangen, das Routing so aufzubohren, dass es auch mit Platzhaltern und Wildcards arbeitet. Irgendwo auf meiner Platte liegen die Sourcen noch rum, erste Tests waren soweit sehr erfolgreich.

Das einzige Problem dabei ist aber die Tatsache, dass man das dann beidseitig implementieren sollte. Generieren der URLs anhand der Routing Regeln und aufdröseln ankommender Requests auch unter Verwendung der Routing Regeln. Das ist nicht ohne und wird nicht kompatibel mit dem jetzigen AMR-Plugin sein, dessen Grundidee von Anfang an die war, die Kategoriestruktur abzubilden.

Vielleicht kann man sich überlegen, dass man nicht das ganze Paket implementiert, es aber um ein paar Features erweitert.

Die Sache mit dem Abdecken der Unterkategorien macht mich etwas nachdenklich und ich bin mir nicht sicher, ob man das generisch genug machen kann.

Da ist es viel einfacher, in der contenido/plugins/mod_rewrite/includes/front_content_controller.php die $_SERVER['REQUEST_URI'] zu prüfen, und einen vorhandenen Prefix /beispiel/ zu entfernen, bevor man das den Controller des AMR-Plugins übergibt. Beim Generieren der URLs kannst du dich in die Chain 'Contenido.Frontend.PostprocessUrlBuilding' einklinken und bei Bedarf den Prefix '/beispiel/' an die URLs anhängen.

Gruß
xmurrix

langwebdesign
Beiträge: 73
Registriert: So 23. Okt 2005, 14:11
Wohnort: Titting
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von langwebdesign » Mo 10. Aug 2015, 18:36

Hallo xmurrix,

habe gerade zum ersten mal das Routing konfiguriert und ein Teil der Definitionen hat funktioniert und der andere nicht...
Das hat mich zu diesem Eintrag gebracht und die Lösung war ganz einfach, habe die clean URLs durhc front_content.php?idart=X ersetzt.

Du hast das in deinem Post bei den Routing Beispielen auch schön mit (ACHTUNG: Falsch!!!) gekennzeichnet, leider fehlt das im Contenido Backend.

Könntest du das vielleicht mal hinzufügen?

mfg
Stephan
Dev Umgebung: Contenido Git Develop Branch, Win 10, PHP 7.2.13, VS Code, XDebug, PHP integrated Webserver
Aktuelle arbeite ich am LDAP Plugin für Frontend (und irgendwann Backend) User, Feedback erwünscht!

xmurrix
Beiträge: 2744
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von xmurrix » Mo 10. Aug 2015, 19:08

langwebdesign hat geschrieben:...Du hast das in deinem Post bei den Routing Beispielen auch schön mit (ACHTUNG: Falsch!!!) gekennzeichnet, leider fehlt das im Contenido Backend.

Könntest du das vielleicht mal hinzufügen?...
Hallo Stephan,

detaillierte Infos zu den Routing-Definitionen findest du bei Klick auf den blauen i-Icon neben der Beschreibung. Darin sollte auch stehen, wie man die Ziel-Url anzugeben hat, auch der Hinweis mit falscher Angabe.

Gruß
xmurrix

langwebdesign
Beiträge: 73
Registriert: So 23. Okt 2005, 14:11
Wohnort: Titting
Kontaktdaten:

Re: AMR: Frage zu Routing-Definitionen

Beitrag von langwebdesign » Mo 10. Aug 2015, 19:17

Hi xmurrix,

ja da habe ich nachgesehen, bei 4.9.7 kommt das zum Vorschein:

Code: Alles auswählen

 Pro Zeile eine Routing Definition wie folgt eingeben:

# {eingehende_url}>>>{neue_url}
/eingehende_url/name.html>>>neue_url/neuer_name.html

# bestimmte eingehende url zur einer seite weiterleiten
/aktionen/20_prozent_auf_alles_ausser_tiernahrung.html>>>front_content.php?idcat=23

# request zum wwwroot auf eine bestimmte seite routen
/>>>front_content.php?idart=16


    Das Routing schickt keinen HTTP Header mit einer Weiterleitung zur Ziel-URL, die Umleitung findet intern
    durch das Ersetzen der erkannten Eingangsseite gegen die neue Zielseite statt (Überschreiben der Artikel-/Kategorieid)
    Eingehende URLs können auch nicht vorhandene Ressourcen (Kategorie, Artikel) sein, hinter der Ziel URL muss eine
    gültige CONTENIDO-Seite (Kategorie/Artikel) liegen
    Als Ziel URL sollte eine reale URL zur Kategorie/Seite angegeben werden,
    z. B. front_content.php?idcat=23 oder front_content.php?idart=34.
    Bei mehrsprachigen Auftritten sollte die Id der Sprache angehängt werden,
    z. B. front_content.php?idcat=23&lang=1
    Bei mehreren Mandanten im gleichen Verzeichnis sollte die Id des Mandanten angehängt werden,
    z. B. front_content.php?idcat=23&client=2
    Die Zielurl sollte nicht mit '/' oder './' beginnen (falsch: /front_content.php, richtig: front_content.php)
Also hab ich die Definition nach dem ersten Beispiel Eintrag gemacht.
Wenn ich mir das im Nachhinein nochmal durchlese steht da schon

Code: Alles auswählen

Als Ziel URL sollte eine reale URL zur Kategorie/Seite angegeben werden
Aber als erstes sieht man halt das Beispiel in der ersten Zeile.
Der Hinweis, das das falsch ist, so wie er bei dir im Post steht, fehlt aber.

Stephan
Dev Umgebung: Contenido Git Develop Branch, Win 10, PHP 7.2.13, VS Code, XDebug, PHP integrated Webserver
Aktuelle arbeite ich am LDAP Plugin für Frontend (und irgendwann Backend) User, Feedback erwünscht!

Gesperrt