AMR: "Dateiendung am Ende der URL"

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
mattmarr
Beiträge: 361
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

AMR: "Dateiendung am Ende der URL"

Beitrag von mattmarr » Mo 24. Okt 2016, 09:54

Hallo!

Kurze Frage:
Kann ich AMR irgendwie so einstellen das ich auch ohne "Dateiendung am Ende der URL" nutzen kann?
Jedesmal wenn ich die Endung aus dem Inputfeld lösche, wir dmir wieder ".html" reingesetzt.

Wenn ich die URL im Browser ohne Endung eingebe löst AMR trotzdem die URL korrekt auf und zeigt mir die richtige Seite.

Quelltext zum mod_rewrite-Plugin hab ich mir schon angeschaut und bissel rumgespielt (class.modrewrite_content_controller.php / zeile 260 & 261) . Leider ohne Erfolg.

Was mach ich falsch?



Gruß
Matthias

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

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von Faar » Mo 24. Okt 2016, 12:12

Das AMR kann URLs mit Artikelnamen anzeigen, aber dann fügt es automatisch .html hinten an, oder aber es zeigt nur Kategorien an, dann wird wahrscheinlich immer nur der Startartikel ausgewählt.
Das ist die Einstellung.

Wo das .html angefügt wird, weiß ich auch nicht, aber das AMR hangelt sich an den Alias-Namen entlang, weshalb eine URL mit Artikel-Namen aber ohne .html durchaus funktionieren kann.
Was soll das AMR machen, wenn jeweils so eine URL ankommt?

Code: Alles auswählen

domain.tld/kategorie/artikelname/
domain.tld/kategorie/kategorie/
Woran unterscheidet AMR im echten Fall nun ohne .html, welches Kategorie und welches Artikel ist?
Das .html sagt dem AMR vielleicht, dass der Name vor dem Punkt ein Artikel-Alias ist und alles andere davor (vor dem letzten /) sind Kategorie-Aliase.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

mattmarr
Beiträge: 361
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von mattmarr » Fr 4. Nov 2016, 11:53

Hallo Faar!
Faar hat geschrieben:Woran unterscheidet AMR im echten Fall nun ohne .html, welches Kategorie und welches Artikel ist?
Das .html sagt dem AMR vielleicht, dass der Name vor dem Punkt ein Artikel-Alias ist und alles andere davor (vor dem letzten /) sind Kategorie-Aliase.
Das Thema ist "Trailing-Slash".

Beispiel wie es richtig ist:

Code: Alles auswählen

domain.tld/kategorie/artikelname
domain.tld/kategorie/kategorie/
Ich kann zwar per .htaccess prüfen ob am ende ein slash ist oder nicht und entsprechend den Link anspassen. Mehr aber auch nicht.
AMR müste so umgeschrieben werden, das es automatisch hinter jeden Link ein Slash setzt, wenn es sich nur um eine Kategorie handelt. Zusätzlich müste endlich die funtkion "Dateiendung am Ende der URL" nutzbar sein.


Gruß
Matthias

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

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von Faar » Fr 4. Nov 2016, 14:35

mattmarr hat geschrieben:Hallo Faar!
Hallo Matthias.
Das Thema ist "Trailing-Slash".
Ja, aber...
Beispiel wie es richtig ist:

Code: Alles auswählen

domain.tld/kategorie/artikelname
domain.tld/kategorie/kategorie/
Das ist nicht richtig oder falsch, sondern eine Empfehlung, es so handzuhaben.
domain.tld/kategorie/kategorie kann genau so richtig sein.
Der Server sucht in der Regel in diesem Fall zuerst nach einer Datei namens "kategorie" und wenn er die nicht findet, nach einem Verzeichnis gleichen Namens und dort dann nach index.html oder .php.
Daraus abzuleiten, dass eine Endung ohne Slash immer eine Datei sei, ist aber falsch.
Denn Besucher können den Slash auch weg lassen und dennoch ist die URL gültig, weil der Server nach dieser Regel sucht.
Ich kann zwar per .htaccess prüfen ob am ende ein slash ist oder nicht und entsprechend den Link anspassen. Mehr aber auch nicht.
Du würdest also eine eingegebene URL fälschen.
domain.tld/kategorie/kategorie wird zu ==> domain.tld/kategorie/artikelname.html

Merkst Du, wie fatal das wäre?
AMR müste so umgeschrieben werden, das es automatisch hinter jeden Link ein Slash setzt, wenn es sich nur um eine Kategorie handelt.
Tut es das nicht schon?
Falls nicht, wäre das bei der Option "Ohne Dateiendung" sicher sinnvoll.
Aber das beträfe auch nur die Links, die nach außen sichtbar gemacht werden, aber nicht die Links, die von außen rein kommen.
Letzteres hat immer noch ein Besucher in der Hand, der manuell einen Link in den Browser setzt.
Zusätzlich müste endlich die funtkion "Dateiendung am Ende der URL" nutzbar sein.
Die Funktion ist schon nutzbar, aber nur halt mit .html, denn ohne geht es aus oben genannten Gründern vermutlich nicht treffsicher genug.
Schau, sehr oft lauten Kategorie und Artikelname (in Artikeleigenschaften) gleich (meine Erfahrung).
Würde das AMR nun so vorgehen, wie von dir gedacht und auch nach der Regel der Server, würde es zuerst in den Alias-Namen der Artikel nachschauen, ob es dort etwas findet.
domain.tld/kategoriename (1)/kategoriename (2) würde dann eventuell nicht am Ende als Kategorie 2 gefunden werden, sondern als domain.tld/kategoriename (1)/artikelname (2).html

Aber: Wenn die Contenido User nun darauf achten würden, dass kein Artikelname in einer höheren Kategorie gleich lautet, als irgendeine untere Kategorie, dann könnte das nach der Regel funktionieren.
Denn wenn das AMR keinen Artikel mit artikelname (2) findet, dann sucht es weiter in den Kategorie-Alias-Namen bis es kategoriename (2) findet.
Das wäre fein.
Natürlich wird es langsamer dadurch, weil Contenido recht abstrakt nach der Datenbank greift, aber am Ende sollte es theoretisch gehen.

Zweites Aber: User halten sich kaum an Regeln, verstehen diese teils nicht oder vergessen sie.
Leider gibt es welche, die gleiche Namen für mehrere Kategorien nehmen wollen ("Die sind aber doch in einer anderen Kategorie") und sich dann wundern, warum der Link nicht mehr gefunden wird oder immer die gleiche Seite aufpoppt statt der neuen mit gleichem Namen.
Und wenn dann noch Artikelnamen dazu kommen, die auch noch gleichlauten können, dann wird die Verwirrung groß.

Drittes Aber: Ich glaube, dass es noch Altlasten im AMR gibt, die man überarbeiten sollte.
Diese Prozentzahl soll vermutlich dem Rechnung tragen und auch die Geschwindigkeit beschleunigen, denn 70% könnten bedeuten, dass wenn 70% des Kategorie-Alias übereinstimmen, dass diese Kategorie dann als Treffer gilt.
So wäre auch zu erklären, dass es in einem Projekt zu Problemen kam, als Kategorie-Namen sich nur durch eine Zahl am Ende des Alias unterschieden.
Aber erklär mal einer einem Kunden, dass er nicht beliebige Kategorie-Alias-Namen nehmen kann, weil die einander zu ähnlich sind.
Andererseits, warum konnte das AMR kategorie1 nicht von kategorie2 unterscheiden?
Bei 100% hätte es das können sollen, ohne die Aliasnamen deutlicher unterschiedlich zu machen.
(Der Spaß ging erst richtig los, als die Aliasnamen mal neu eingelesen "refreshed" werden mussten und alle Handarbeit zur Unterscheidungskraft weg war :motz: )

Und nun kommst Du, und willst auch noch die Artikelnamen in der URL ohne Endung schreiben können wollen ... :roll:

Gruß
Frank

P.S. möge Xmurrix mich korrigieren, falls ich Unsinn geschrieben habe :mrgreen:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

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

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von xmurrix » Fr 4. Nov 2016, 22:46

Hallo mattmarr, hallo Faar,

möchte auch kurz mein Feedback zu diesem Thema geben.
mattmarr hat geschrieben:...Kann ich AMR irgendwie so einstellen das ich auch ohne "Dateiendung am Ende der URL" nutzen kann?...
Ja, das kann man. Siehe Einstellung "Dateiendung am Ende der URL" auf der Plugin-Seite. Allerdings empfehle ich es dir nicht, da man sich mehr Probleme einhandelt, da das Plugin dann bei manchen URLs nicht erkennen kann, ob das letzte Teil des Pfades nun eine Kategorie ist, oder der Artikel.
mattmarr hat geschrieben:...Wenn ich die URL im Browser ohne Endung eingebe löst AMR trotzdem die URL korrekt auf und zeigt mir die richtige Seite...
Das Plugin versucht Kategorie-Id und Artikel-Id zu ermitteln, wenn eines davon gefunden wird, wird die Seite ausgegeben.
Für Kategorie-Pfade, die ein Teil der URL sind, gibt es eine Einstellung, um bei nicht gefundener Kategorie einen ähnlichen Kategorie-Pfad zu finden. Das kann man unter "Prozentsatz für ähnliche Kategorie-Pfade in URLs" auf der Plugin-Seite angeben. Wenn der Wert hier auf 100 gesetzt ist, wird strikt nach dem ankommenden Kategoriepfad gesucht.
Zusätzlich gibt es die Option "Duplicated Content", hier kann man bei "Duplicated Content verhindern" einen Haken setzen, damit eine Seite immer unter einer bestimmten URL ausgegeben wird.
Faar hat geschrieben:...Das .html sagt dem AMR vielleicht, dass der Name vor dem Punkt ein Artikel-Alias ist und alles andere davor (vor dem letzten /) sind Kategorie-Aliase...
Genau. Wenn die angegebene Endung (z. B. ".html") in der URL gefunden wird, dann weiß das Plugin, dass der Teil davor der Artikelalias ist und trennt diesen Teil vom Pfad in der URL.

Als Beispiel nehme ich mal die Kategoriestruktur des Beispielmandanten, da gibt es z. B. folgendes:
Kategoriestruktur "Features dieser Webseite -> Content -> Teaser".
Artikel in der Kategorie "Teaser" mit dem Artikelnamen "Teaser".
Die URL zum Artikel würde normalerweise so aussehen "/features-dieser-webseite/content/teaser/teaser.html".

Wenn man jetzt sagt, ich will Artikel ohne Endung ausgeben, würde die URL so aussehen:
"/features-dieser-webseite/content/teaser/teaser/"

Legt nun ein User unter "Features dieser Webseite -> Content" auch einen Artikel mit dem Namen "Teaser" an und wir haben keine Dateiendung, sieht die URL zum Artikel dann so aus:
"/features-dieser-webseite/content/teaser/"

Hier wird des kompliziert, ist mit der URL
"/features-dieser-webseite/content/teaser/"
die Kategorie "Teaser" unter "Features dieser Webseite -> Content" gemeint oder der Artikel "Teaser" in "Features dieser Webseite -> Content"?
mattmarr hat geschrieben:...AMR müste so umgeschrieben werden, das es automatisch hinter jeden Link ein Slash setzt, wenn es sich nur um eine Kategorie handelt. Zusätzlich müste endlich die funtkion "Dateiendung am Ende der URL" nutzbar sein...
Ja, dem stimme ich zu, will man am Ende der URL einen Slash haben, muss das Plugin angepasst werden. Auf die Dateiendung würde ich nicht verzichten, da man hier mit Problemen rechnen muss, weil das Plugin dann nicht erkennen kann, ob der letzte Teil ein Artikelalias oder der letzte Teil der Kategorie ist.

Das Plugin ist halt aufgrund seiner Vorgeschichte sehr stark mit der Kategoriestruktur von CONTENIDO verbunden, es hat zwar ein paar Einstellmöglichkeiten, die reichen aber nicht für jede Anforderung. Je mehr man da Einbaut, desto komplizierter wird es am Ende für die Benutzer, weil sie vor lauter Einstellungen keinen Überblick haben. Auch die Programmierung des Plugins verkompliziert sich. Jeder kann aber sein eigenes ModeRewrite-Plugin schreiben, abgestimmt auf die eigenen Bedürfnisse.

Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

mattmarr
Beiträge: 361
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von mattmarr » Sa 5. Nov 2016, 10:05

Hallo xmurrix!

xmurrix hat geschrieben:Ja, dem stimme ich zu, will man am Ende der URL einen Slash haben, muss das Plugin angepasst werden. Auf die Dateiendung würde ich nicht verzichten, da man hier mit Problemen rechnen muss, weil das Plugin dann nicht erkennen kann, ob der letzte Teil ein Artikelalias oder der letzte Teil der Kategorie ist.
Man kann doch anhand meines Beispiel erkennen, ob es sich um eine Kategorie oder Artikel handelt. Oder hab ich da irgendwas komplett in den falschen Hals bekommen.

Artikel:

Code: Alles auswählen

domain.tld/kategorie/artikelname
Kategorie:

Code: Alles auswählen

domain.tld/kategorie/kategorie/

Gruß aus dem Wochenende,
Matthias

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

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von Faar » Sa 5. Nov 2016, 15:56

Ich antworte mal.
mattmarr hat geschrieben:Man kann doch anhand meines Beispiel erkennen, ob es sich um eine Kategorie oder Artikel handelt. Oder hab ich da irgendwas komplett in den falschen Hals bekommen.
Vermutlich ja.
Artikel:

Code: Alles auswählen

domain.tld/kategorie/artikelname
Kategorie:

Code: Alles auswählen

domain.tld/kategorie/kategorie/
Das schreiben wir mal neutraler:
Artikel:

Code: Alles auswählen

domain.tld/name1/name2
Kategorie:

Code: Alles auswählen

domain.tld/name1/name2/
So, jetzt ist es klarer, wie das für ein Programm aus sieht.
Wo ist der Unterschied?
/
Was passiert, wenn ein User nur domain.tld/name1/name2 kopiert und aufruft, aber domain.tld/name1/name2/ meint?
"Das Plugin versucht Kategorie-Id und Artikel-Id zu ermitteln, wenn eines davon gefunden wird, wird die Seite ausgegeben. "
Das AMR sucht dann also nicht weiter, sondern nimmt den ersten Treffer. Das heißt auch, es gibt eine natürliche Rangfolge, ungeachtet dessen, dass es weitere Treffer geben könnte, wenn es weiter suchen würde.
Und sonst müsste es eine Wahrscheinlichkeitsberechnung aufstellen, welches der Ergebnisse am ehesten der richtige Pfad wäre.

Ist im Beispiel nun Kategoriepfad /content/teaser/ richtig oder Artikelpfad /content/teaser ?
Das AMR würde entweder bei /content/teaser/ aufhören zu suchen oder bei /content/teaser und die Seite ausgeben lassen.
Je nachdem, was zuerst gefunden wird.
Will man das so wie Du es haben willst, müsste das AMR zuerst alle Treffer suchen, auflisten und dann gewichten und entscheiden, welches am wahrscheinlichsten der richtige Pfad ist.
Man kann es sicher so machen, dass eine Entscheidungsroutine eingebaut wird, die im Falle der Einstellung: "ohne Dateiendung" eine Entscheidung vornimmt, so dass Treffer mit ohne Slash am Ende denjenigen mit Slash / bevorzugt werden.
Das ist eine Programmlogik, die aber für jede Einstellung anders agieren müsste.
Denn bei Einstellung: "mit Dateiendung" würde dann die Kategorie am Ende bevorzugt werden.

Ganz schlimm würde diese Logik werden, wenn dann die %-Einstellung noch hinzu kommt.
Und man muss auch immer bedenken, dass Internetnutzer den Pfad nicht korrekt kopieren und denken, auf den letzten / kommt es sicher nicht an.
Und, alles muss in seltsamen Sprachen funktionieren können, nicht nur in Deutsch.

Aber, wenn Du diese Logik so erweitern kannst, dass sie ins AMR eingebaut werden könnte und die Seiten dann trotzdem noch schnell gefunden werden, nur zu.
Oder du kopierst Dir quasi das AMR und machst was neues damit :-)
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

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

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von xmurrix » Sa 5. Nov 2016, 21:07

Hallo mattmarr,
mattmarr hat geschrieben:...Man kann doch anhand meines Beispiel erkennen, ob es sich um eine Kategorie oder Artikel handelt. Oder hab ich da irgendwas komplett in den falschen Hals bekommen...
Faar hat dazu geantwortet, daher mache ich es kurz. Deine Anforderung wird nicht vom Plugin unterstützt, dazu müsste man das Plugin entsprechend anpassen.

Zum einen die Generierung der URL in "contenido/classes/uri/class.uribuilder.mr.php" und zum anderen das Auflösen der ankommenden URL in "contenido/plugins/mod_rewrite/classes/class.modrewritecontroller.php".

Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

mattmarr
Beiträge: 361
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

Re: AMR: "Dateiendung am Ende der URL"

Beitrag von mattmarr » Sa 5. Nov 2016, 21:16

Hi @all!

Danke schonmal für die vielen Antworten.
Ich werde mir das dir nächste Woche nochmal genauer anschauen und durch den Kopf gehen lassen.

Antworten