Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Michael_G
Posts: 191
Joined: Thu Feb 18, 2016 11:01 pm
Contact:

Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by Michael_G » Mon Oct 30, 2023 11:20 pm

Hallo allerseits,

nachdem ich verschiedenes ausprobiert habe und nur eine Lösung davon zu 99 % funktioniert, stelle ich meine Frage hier:

Problem:
Bis 06/2020 hatte ich für die URLs „normale” Schreibweise von Wörtern benutzt, also Anfangsbuchstaben und Abkürzungen groß geschrieben.
Seit Umstellung auf Kleinschreibung haben es die Bots immer noch nicht kapiert, dass es die alte Schreibweise nicht mehr gibt.
Also gibt es weiterhin auch Page Requests nach Seiten in alter Schreibweise.

Leider ist das Umleiten/Umschreiben von URLs mit Query-String nicht so einfach wie mit „normalen” URLs …

Dennoch fand ich vor ein paar Tagen eine fast perfekte Lösung:

Code: Select all

#Script #1 Kleinbuchstaben | ab 22.10.2023 | Stand: 30.10.2023 (für CKEditor-Nutzung deaktivieren!)
	RewriteCond %{REQUEST_URI}  ^(de|en)?
	RewriteCond %{QUERY_STRING} (.*)([A-Z].*)
	RewriteRule ^(.*)$ $1%1%2? [R=301,L]

#Script #2 Kleinbuchstaben | ab 22.10.2023 | Stand: 30.10.2023 (nur f. CKEditor-Nutzung aktivieren!)
#	RewriteCond %{QUERY_STRING} [A-Z]
#	RewriteCond %{QUERY_STRING} (.*)
#	RewriteRule ^$ %1? [R=301,L]
Das einzige Problem ist hier der CKEditor.
Wenn Script #1 aktiv ist, werden sämtliche URLs, welche Großbuchstaben enthalten, umgeschrieben. Alles super!
Aber dann kann ich nach Einloggen in XH keine Seite im CKEditor bearbeiten, weil sie einfach nicht geladen wird.
Nur ohne Script #1 oder mit Script #2 lässt sich die Seite im CKEditor bearbeiten (Vorschau geht immer).

Es liegt auch nicht an anderen Dingen in meiner .htaccess-Datei. Das habe ich überprüft, indem ich alles außer diesem Script testweise entfernt habe und lediglich die relevanten Rewrite-Sachen für dieses Script drin ließ. Gleiches Ergebnis.

Ich habe auch die im Internet kursierenden PHP-Lösungen getestet, wobei die meisten eh nicht für Query-Strings geeignet sind.
Hier eines, welches praktisch das Gleiche macht wie die o. g. htaccess-Lösung (mit dem gleichen CKEditor-Problem):

Code: Select all

<?php
if(isset($_GET['rewrite-strtolower-url'])) {
	$url = $_GET['rewrite-strtolower-url'];
	unset($_GET['rewrite-strtolower-url']);
	$params = strtolower (http_build_query($_GET));
	if(strlen($params)) {
		$params = '?' . strtolower($params);
	}
	header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
	exit;
}
?>
Vielleicht hat jemand von euch eine Idee, was geändert werden muss, damit der CKEditor sich nicht mehr dagegen sperrt (@olape?)?
Ich hatte in meinen o. g. Scripts auch versuchsweise eine Zeile mit Ausschlusskriterien gesetzt, damit das Script im Falle von „&edit” im Query-String nicht ausgeführt wird (also: !&edit oder !(.*)&edit).
Während das Setzen von Ausschlusskriterien mittels "!" sonst in jedem anderen Script für Umleitungen von URLs mit und ohne Query-Strings prima funktioniert, werden in den o. g. Scripts leider alle Versuche ignoriert und das Script trotzdem ausgeführt.

@Holger als CKEditor-Experte: meine URLs enthalten keine Großbuchstaben, also dürfte der CKEditor theoretisch gar nicht von diesem Script betroffen sein/müsste es ignorieren. Da die Praxis anders aussieht, scheint er Plugins (?) mit Großbuchstaben abzufragen?
Ich habe außer der Grundfunktion „Editieren einer Seite” noch nie irgendwas am CKeditor geändert oder gar Plugins in CKEditor angeschaut/genutzt/geändert (höchstens standardmäßig enthaltene unbewusst genutzt).

Vielleicht funktioniert Seiten-editieren mit einem anderen Editor, aber ich mag keinen anderen Editor als CKEditor verwenden.

Ich freue mich über eure Lösungsvorschläge.
Vielleicht denkt auch jemand über ein Plugin nach, falls eine PHP-Lösung zum Umschreiben falsch abgefragter Seiten einfacher ist?
Ich kann leider immer noch kein PHP.

Oder könnte man das in userfuncs.php integrieren oder mittels include-Befehl in der index.php mitlaufen lassen?
Meine Versuche waren erfolglos, aber es fehlt mir leider an PHP-Know-How. Irgendwie geht es bestimmt doch …

Edit: habe ganz zufällig eine Nebenwirkung meines Scripts entdeckt: die Suche nach Begriffen mit Großbuchstaben führt damit immer zu einem Error 404. Deshalb habe ich meine Scripts wieder aus der .htaccess-Datei entfernt.
Auch hier war das Einfügen einer Zeile mit „RewriteCond %{QUERY_STRING} !&search” (Ausschlusskriterium &search) erfolglos.
Ciao
Michael

Let's Encrypt!

olape
Posts: 2752
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by olape » Wed Nov 01, 2023 10:28 am

Michael_G wrote:
Mon Oct 30, 2023 11:20 pm
Dennoch fand ich vor ein paar Tagen eine fast perfekte Lösung:
Ich kann mir nicht vorstellen, dass überhaupt eine der beiden Lösungen tut, was sie soll.
Um einen bestimmten Teil der URL oder das QueryStrings in Kleinbuchstaben zu wandeln müsste

Code: Select all

RewriteMap lc int:tolower
gesetzt sein.

Beim zweiten ist es mir komisch:

Code: Select all

#	RewriteCond %{QUERY_STRING} [A-Z]
#	RewriteCond %{QUERY_STRING} (.*)
Die erste Zeile besagt, wenn der QueryString Großbuchstabe enthält, laut der zweiten Zeile kann es dann alles in beliebiger Anzahl sein.
Ich denke, diese zweite Zeile könnte raus.

Ich würde es so probieren (allerdings werden hier sehr wahrscheinlich auch Pfadangaben in Kleinbuchstaben umgewandelt, das könnte ein Problem werden):

Code: Select all

RewriteCond %{REQUEST_URI}  ^(de|en)?
RewriteMap lc int:tolower
RewriteCond %{QUERY_STRING} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
Michael_G wrote:
Mon Oct 30, 2023 11:20 pm
Ich habe auch die im Internet kursierenden PHP-Lösungen getestet, wobei die meisten eh nicht für Query-Strings geeignet sind.
Hier eines, welches praktisch das Gleiche macht wie die o. g. htaccess-Lösung (mit dem gleichen CKEditor-Problem):
Hier würde ich denken, benötigt man trotzdem Eintragungen in der .htaccess, denn irgendwer muss "$_GET['rewrite-strtolower-url'" setzen. Hier "$params = '?' . strtolower($params);"wird der gesamte QueryString in Kleinbuchstaben gewandelt, das ist ja, was du erreichen willst. Hier allerdings "strtolower($url)" würde ich vermuten, dass die gesamte URL in Kleinbuchstaben gewandelt wird.
Das wird vermutlich bei Pfadangaben, falls die Großbuchstaben enthalten, daneben gehen.

Aber, das ist alles nur so beim Lesen, ich habe im Moment keine Zeit irgendetwas davon auszutesten und den CKEditor nutze ich auch nicht.
Gruß Olaf, Plugins for CMSimple_XH

Ich habe schon lange den Verdacht, dass so viele so eifrig auf Gender, Trans und Queer machen:
Weil sie für das Fachliche ganz einfach zu doof sind.

lck
Posts: 2971
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by lck » Wed Nov 01, 2023 11:54 am

Folgendes scheint zu funktionieren, zumindest bei mir unter Xampp getestet. Eine Kombi aus .htaccess und PHP. Die URL kann dann nur noch mit Kleinbuchstaben aufgerufen werden.
https://www.simonholywell.com/post/2012 ... write-php/ (siehe auch bei stackoverflow)

Es gibt auch Lösungen für die httpd.conf, aber das hast du normal keinen Zugriff darauf, außer du hast einen eigenen Server.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

lck
Posts: 2971
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by lck » Wed Nov 01, 2023 11:58 am

olape wrote:
Wed Nov 01, 2023 10:28 am
Hier würde ich denken, benötigt man trotzdem Eintragungen in der .htaccess, denn irgendwer muss "$_GET['rewrite-strtolower-url'" setzen. Hier "$params = '?' . strtolower($params);"wird der gesamte QueryString in Kleinbuchstaben gewandelt, das ist ja, was du erreichen willst. Hier allerdings "strtolower($url)" würde ich vermuten, dass die gesamte URL in Kleinbuchstaben gewandelt wird.
Das wird vermutlich bei Pfadangaben, falls die Großbuchstaben enthalten, daneben gehen.
:( Genau, das passiert bei meinem geposteten Vorschlag.
Not Found
The requested URL was not found on this server.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

olape
Posts: 2752
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by olape » Wed Nov 01, 2023 1:13 pm

lck wrote:
Wed Nov 01, 2023 11:58 am
Genau, das passiert bei meinem geposteten Vorschlag.
Versuche es mal so:

Code: Select all

header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
zu

Code: Select all

header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . $url . strtolower($params) , true, 301);
Vielleicht geht das besser.
Aber, auch hier kann es Probleme geben, wenn i.e. Namen im Query weitergegeben werden.
-> ...&name=Meier&vorname=Max&... dann würde auch das in Kleinbuchstaben gewandelt.
Gruß Olaf, Plugins for CMSimple_XH

Ich habe schon lange den Verdacht, dass so viele so eifrig auf Gender, Trans und Queer machen:
Weil sie für das Fachliche ganz einfach zu doof sind.

Michael_G
Posts: 191
Joined: Thu Feb 18, 2016 11:01 pm
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by Michael_G » Wed Nov 01, 2023 10:02 pm

olape wrote:
Wed Nov 01, 2023 10:28 am
Aber, das ist alles nur so beim Lesen, ich habe im Moment keine Zeit irgendetwas davon auszutesten und den CKEditor nutze ich auch nicht.
Hallo Olaf,
danke, dass Du überhaupt kurz gelesen hast.
Leider liegst Du daneben, naja hattest zu wenig Zeit. :-)

1. Habe ich keinen Admin-Zugang zu dem Webserver, bin doch nur Webspace-Mieter und muss deshalb mit Lösungen für die .htaccess-Datei vorlieb nehmen.

2. Selbstverständlich sind die von mir erwähnten PHP-Lösungen alle über die .htaccess-Datei aufzurufen.

Das ist aber nicht Teil des Problems. Die eine PHP-Lösung habe ich zitiert, damit eben jemand mit mehr PHP-Kenntnissen schauen kann, ob man das für XH besser machen kann oder warum es mit XH nicht optimal funktioniert.
Und für Plugin-Programmierer könnte es eine Inspiration sein.

Apropos: Ich habe eine neue Idee, die besser in die Rubrik Plug-ins passt.
Ciao
Michael

Let's Encrypt!

Michael_G
Posts: 191
Joined: Thu Feb 18, 2016 11:01 pm
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by Michael_G » Wed Nov 01, 2023 10:04 pm

lck wrote:
Wed Nov 01, 2023 11:54 am
Folgendes scheint zu funktionieren, zumindest bei mir unter Xampp getestet. Eine Kombi aus .htaccess und PHP. Die URL kann dann nur noch mit Kleinbuchstaben aufgerufen werden.
https://www.simonholywell.com/post/2012 ... write-php/ (siehe auch bei stackoverflow)

Es gibt auch Lösungen für die httpd.conf, aber das hast du normal keinen Zugriff darauf, außer du hast einen eigenen Server.
Danke Dir, die Lösung funktioniert glaube ich nur ohne Query-Strings, jedenfalls war das damals so, als ich die getestet hatte.
Wenn ich es recht in Erinnerung habe.
Ich schaue es mir aber nochmal an.
Ciao
Michael

Let's Encrypt!

Michael_G
Posts: 191
Joined: Thu Feb 18, 2016 11:01 pm
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by Michael_G » Wed Nov 01, 2023 10:14 pm

olape wrote:
Wed Nov 01, 2023 1:13 pm
lck wrote:
Wed Nov 01, 2023 11:58 am
Genau, das passiert bei meinem geposteten Vorschlag.
Versuche es mal so:

Code: Select all

header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
zu

Code: Select all

header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . $url . strtolower($params) , true, 301);
Vielleicht geht das besser.
Aber, auch hier kann es Probleme geben, wenn i.e. Namen im Query weitergegeben werden.
-> ...&name=Meier&vorname=Max&... dann würde auch das in Kleinbuchstaben gewandelt.
Danke für den Vorschlag, werde ich testen.
Edit: funktioniert leider nicht.

Probleme mit Namen im Query-String? Verstehe ich nicht. CMSimple_XH nutzt doch ausschließlich Query-Strings als URIs und warum sollen Namen oder andere Bezeichnungen dann wieder groß geschrieben werden?
– Nein, „Clean URLs” sind generell klein geschrieben, das ist einheitlich und macht weniger Probleme.
– Und um zu verhindern, dass bei .htaccess-Script-Lösungen ungewollt Dateinamen umgewandelt werden, gibt es Parameter.
Die braucht man aber übrigens nicht für Query-String-Umwandlungen einbauen, sondern nur für echte URIs und keine Fake-URis, die eigentlich nur Query-Strings sind wie bei XH!
Technisch gesehen benutzt CMSimple_XH echte URIs lediglich für die Sprachordner. Alles andere sind Query-Strings.
Und wenn man die in der .htaccess umschreibt, werden damit keine echten Dateien oder Ordner angesprochen, also auch nicht ungewollt umbenannt. ;-)
Ciao
Michael

Let's Encrypt!

olape
Posts: 2752
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by olape » Thu Nov 02, 2023 6:59 am

Michael_G wrote:
Wed Nov 01, 2023 10:14 pm
Edit: funktioniert leider nicht.
Was funktioniert nicht?
Michael_G wrote:
Wed Nov 01, 2023 10:14 pm
Probleme mit Namen im Query-String? Verstehe ich nicht. CMSimple_XH nutzt doch ausschließlich Query-Strings als URIs und warum sollen Namen oder andere Bezeichnungen dann wieder groß geschrieben werden?
XH selber ja, aber es gibt ja auch noch Plugins, Formularaufrufe usw. Da kommt es durchaus vor, dass weiter Parameter im QueryString übergeben werden. Also könnten es auch mal Namen sein (war ja nur ein Beispiel), aber auch bei anderen Parametern kann die Schreibweise entscheidend sein.
Hier zum Beispiel --> https://olaf.penschke.net/?Kontakt&xh_m ... DC-Core_XH
Michael_G wrote:
Wed Nov 01, 2023 10:14 pm
Nein, „Clean URLs” sind generell klein geschrieben, das ist einheitlich und macht weniger Probleme.
Ich weiß jetzt nicht, wie du auf CleanURLS kommst, aber auch die müssen nicht zwingend kleingeschrieben sein.
Michael_G wrote:
Wed Nov 01, 2023 10:14 pm
Technisch gesehen benutzt CMSimple_XH echte URIs lediglich für die Sprachordner. Alles andere sind Query-Strings.
Na, nicht ganz. Bei Installationen im Unterordner ist auch dieser Teil von "path".
Michael_G wrote:
Wed Nov 01, 2023 10:14 pm
Alles andere sind Query-Strings.
Und wenn man die in der .htaccess umschreibt, werden damit keine echten Dateien oder Ordner angesprochen, also auch nicht ungewollt umbenannt.
Mit dem oben genannten Problem. Man müsste also versuchen, den QueryString zu begrenzen bis zum ersten "=". Das sollte die ungewollte Wandlung weiterer Parameter unterbinden.
Gruß Olaf, Plugins for CMSimple_XH

Ich habe schon lange den Verdacht, dass so viele so eifrig auf Gender, Trans und Queer machen:
Weil sie für das Fachliche ganz einfach zu doof sind.

lck
Posts: 2971
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Seitenabfragen mit Großbuchstaben in Kleinbuchstaben umwandeln

Post by lck » Thu Nov 02, 2023 11:04 am

olape wrote:
Wed Nov 01, 2023 1:13 pm
lck wrote:
Wed Nov 01, 2023 11:58 am
Genau, das passiert bei meinem geposteten Vorschlag.
Versuche es mal so:

Code: Select all

header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
zu

Code: Select all

header('Location: https://' . $_SERVER['HTTP_HOST'] . '/' . $url . strtolower($params) , true, 301);
Vielleicht geht das besser.
Aber, auch hier kann es Probleme geben, wenn i.e. Namen im Query weitergegeben werden.
-> ...&name=Meier&vorname=Max&... dann würde auch das in Kleinbuchstaben gewandelt.
Ok, getestet aber mit http statt https, lokal unter Xampp.

Versuch einen Ordner names "Test" in ./userfiles/ aufzurufen.
Ergebnis:

Code: Select all

http://localhost/xh176/xh176_urluppercase/userfiles/Test
wird zu

Code: Select all

http://localhost/xh176/xh176_urluppercase/userfiles/Test/?rewrite-strtolower-url=userfiles/Test
Not Found
The requested URL was not found on this server.

Code: Select all

http://localhost/xh176/xh176_urluppercase/userfiles/test/
ist aufrufbar
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

Post Reply