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]
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;
}
?>
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.