Nachtrag: Zusammenfassung mit komplettem Lösungsweg (für Apache-Webserver)
Frage/Problem:
1. Ich verwende seit Jahren eigene Fehlerseiten. Diese werden Besuchern aber nur angezeigt, wenn diese eine Webadresse ohne Fragezeichen eintippen. Echte CMSimple_XH-Seiten enthalten aber ein ? und dann zeigt das Plug-in Moved_XH nur einen zweizeiligen Text anstelle der eigenen hilfreichen hübschen Fehler-404-Seite.
2. Nachdem ich es geschafft habe, dass Moved_XH meine Fehlerseite anzeigt stelle ich fest, dass es weiterhin stur die h1-Überschrift über der Überschrift meiner Fehlerseite anzeigt. Das ist doppelt und sehr unschön.
Ich könnte die h1-Überschrift meiner Fehlerseite weglassen, aber ich bin Perfektionist.
Antwort/Lösungsweg (auch für Anfänger geeignet):
Basis für eigene Fehlerstatus-Seiten ist dieser Eintrag in der .htaccess-Datei im Hauptverzeichnis der CMSimple_XH-Installation (root):
Code: Select all
# Nette Fehlerseiten
ErrorDocument 403 /?403
ErrorDocument 404 /?404
ErrorDocument 410 /?410
Tipp für mehrsprachige Websites:
Erstelle eine .htaccess-Datei mit folgendem Text in Deinen Sprachordnern (also z. B. de und en), hier die de-Version:
Code: Select all
DefaultLanguage de
# Nette Fehlerseiten
ErrorDocument 403 /de/?403
ErrorDocument 404 /de/?404
ErrorDocument 410 /de/?410
In CMSimple_XH legst Du mittels PageManager (Admin-Menü „Seiten”) pro Sprache mindestens die Seiten 403 und 404 an, besser auch gleich die 410.
Diesen verpasst Du dann einen schönen Erklärungstext (inspirierende Beispiele findest Du massenhaft mittels Suchmaschine; Suchbegriff „eigene Fehlerseiten entwerfen”).
Besonders wichtig für die 404 (HTTP Nicht gefunden), denn damit bedienst Du Deine Besucher/Kunden, welche nicht gleich abwandern sollen.
– Aufmunternde tröstende Worte, eine Suchmaske und ein paar Links (zur Startseite, zur Sitemap und ggf. Hilfeseite) helfen, dass der Besucher nicht wütend die Fehlerseite verlässt …
Wer mag, macht das auch für die 410 (HTTP Gone).
Die 403 (HTTP Verboten) bedarf keiner großen Mühe, da genügt die offizielle Erklärung a la Wikipedia.
Damit diese Fehlerseiten auch für Seitenaufrufe ohne das für CMSimple_XH notwendige Fragezeichen korrekt verarbeitet werden, fügst Du in der Quelltextansicht folgenden Text ein:
Seite 403:
Code: Select all
<div>#cmsimple header('HTTP/1.0 403 HTTP Forbidden');#</div>
Seite 404:
Code: Select all
<div>#cmsimple header('HTTP/1.0 404 Not Found');#</div>
Seite 410:
Code: Select all
<div>#cmsimple header('HTTP/1.0 410 Gone');#</div>
Damit das alles nachher auch zusammen mit dem Plug-in Moved_XH perfekt funktioniert, kopierst Du die fertigen Seiten 404 und 410 und vergibst dafür folgende Namen: 404 -> Kopie 4o4 (in Worten: vier-o-vier). 410 -> 41o (in Worten: vier-eins-o).
Bei diesen Kopien löschst Du die h1-Überschrift heraus, denn diese wird vom Plug-in und ansonsten von CMSimple_XH eingefügt (lässt sich nicht verhindern, daher die Seitenkopien als effektiver Workaround).
Wenn Du in der Sonderzeichenersetzungstabelle von CMSimple_XH auch Großbuchstaben beim Speichern von Webseiten in Kleinbuchstaben verwandeln lässt, kannst Du als Seitennamen 4O4 (großes O - sieht eher wie eine Null aus) und 41O verwenden.
Beim Speichern der Seite werden diese dann zu 4o4 und 41o.
Beliebige andere Namen wären auch möglich, aber vielleicht schwerer zu merken bzw. einheitlich zu halten.
Es hätte auch einfach „Not-Found” und „Gone” funktioniert, denn es geht hier nur darum, nicht die vorhandenen 404 und 410 zu verwenden (Problem: doppelte Überschrift).
Gleich sind wir fertig, nun geht es um die Dateien in Moved_XH, Menüpfad aus Deinem Hauptverzeichnis:
plugins/moved/views
Hier bitte die Dateien
not-found.php und
gone.php zuerst an andere Stelle sichern (falls etwas schief geht oder das alles auf Deinem Webserver nicht funktioniert und Du alles rückgängig machen musst).
Danach ersetzt Du den Inhalt der Datei
not-found.php mit folgendem Inhalt:
Achtung, das ist nicht vier-null-vier, sondern vier-O-vier (Großbuchstabe O in der Mitte)!
Und in der Datei
gone.php ersetzt Du den Inhalt mit folgendem Text:
Achtung, das ist nicht vier-eins-null, sondern vier-eins-O (Großbuchstabe O am Ende)!
Der Trick ist folgender: wenn eine interne Webseite von CMSimple_XH (also mit Fragezeichen) falsch eingetippt wird, wird die Fehlerseite mit der speziellen Schreibweise aufgerufen, in der Du die h1-Überschrift weggelassen hast. Denn die fügt das System immer ein und das wäre sonst doppelt.
Ruft jemand eine Webseite ohne das notwendige Fragezeichen auf, wird die „normale” 404-Seite aufgerufen, in der Du eine h1-Überschrift hast (also semantisch korrekter Aufbau mit h1, dann h2, dann Text).
Hier sind wir beinahe fertig, aber wenn die h1-Überschriften angepasst werden sollen, bitte auch noch die Sprachdateien von Moved_XH kontrollieren oder ändern:
Menüpfad: plugins/moved/languages
Die Datei de.php sieht bei mir nach Modifikation in den beiden relevanten Zeilen so aus:
Code: Select all
$plugin_tx['moved']['title_notfound']="Fehler 404";
$plugin_tx['moved']['title_gone']="Fehler 410";
und die Datei en.php sieht bei mir nach Modifikation in den beiden relevanten Zeilen so aus:
Code: Select all
$plugin_tx['moved']['title_notfound']="Error 404";
$plugin_tx['moved']['title_gone']="Error 410";
Das kannst Du gern anders machen, denn die Geschmäcker sind verschieden. Aber Du sollst wissen, wo die Stellschrauben des Systems sind, um die eigene Kreativität nicht auszubremsen.
Hier noch eine Ergänzung für alle, die eine mehrsprachige Website mit 2 Domains auf einem Apache-Webserver betreiben:
Damit Besucher bei fehlerhafter Seitenabfrage ohne das CMSimple-typische Fragezeichen die Fehlerseite in ihrer Sprache erhalten, bitte noch die .htaccess um folgenden Code erweitern (Beispiel für Deutsch + Englisch, ggf. anpassen):
Code: Select all
# Fehlenden Sprachordner (de|en) einfügen
RewriteCond %{REQUEST_URI} !^/(de|en) [NC]
RewriteCond %{HTTP_HOST} ^deutsche-domain\. [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /de/$1 [R=301,NE,QSA,L]
RewriteCond %{REQUEST_URI} !^/(de|en) [NC]
RewriteCond %{HTTP_HOST} ^englische-domain\. [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /en/$1 [R=301,NE,QSA,L]
Wer sich das zutraut, kann das auch von der Browsersprache des Besuchers abhängig machen.
Dann verwende stattdessen diesen kürzeren Code:
Code: Select all
# Spracherkennung + Hauptdomains | läuft bei mir seit 28.03.2022
RewriteCond %{HTTP:Accept-Language} ^((?!en).)*de [NC]
RewriteCond %{QUERY_STRING} !filebrowser(.*) [NC]
RewriteRule ^$ /de/ [R=301,L]
RewriteCond %{HTTP:Accept-Language} ^((?!de).)*en [NC]
RewriteCond %{QUERY_STRING} !filebrowser(.*) [NC]
RewriteRule ^$ /en/ [R=301,L]
Vorteil: Das funktioniert auch mit nur einer Domain.
Nachteil: Google sowie fast alle anderen Online-Testtools arbeiten mit fest eingestellter Browsersprache Englisch, daher werden diese keine fälschlicherweise ohne Sprachordner abgefragten deutschen Seiten finden bzw. als fehlerhafte Links melden/anzeigen.
Das musst Du dann berücksichtigen und zur Fehleranalyse in Deinem Browser (mit hinterlegter Sprache Deutsch) testen.
Beispiel: Du hast eine Webadresse
https://example.com/de/?software
Ein deutscher Besucher gibt falsch ein:
https://example.com/?software
Dank Browserspracherkennung wird das zu:
https://example.com/de/?software
Ein englischer Besucher gibt falsch ein:
https://example.com/?software
Dank Browserspracherkennung wird das zu:
https://example.com/en/?software
Wenn Du die Seite „Software” in beiden Sprache angelegt hast, ist alles super.
Wenn Du diese Seite aber nur in Deutsch angelegt hast oder wenn es ein Wort ist, welches nicht in beiden Sprachen gleich ist, wird die Seite von internationalen Besuchern nicht gefunden.
– Kein echtes Problem, denn wir haben ja schöne eigene Fehlerseiten in jeder Sprache angelegt.
Oder Du hinterlegst in der Tabelle von Moved_XH (/content/en/moved.csv) eine Umleitung vom deutschen Wort auf den korrekten Pfad der passenden englischen Seite.
– Aber das sollte man im Hinterkopf behalten. Und im Text der Fehlerseite 404 erwähnen, dass Deine Website Inhalte auch abhängig von der Browsersprache ausliefert.