.htaccess ErrorDocument

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Caravaner
Posts: 101
Joined: Sat Oct 05, 2019 5:20 pm
Location: Wadgassen (Saarland)
Contact:

.htaccess ErrorDocument

Post by Caravaner » Thu Sep 08, 2022 1:31 pm

Der Anfang dieses Themas liegt eigentlich dort:
Caravaner wrote:
Tue Sep 06, 2022 3:31 pm
Hallo Christoph,
heute wollte ich das Plugin ausprobieren.
Sowohl online als auch auf einem lokalen Testserver führte die Installation sofort und ohne weitere Reaktion der Website zu einem weißen Bildschirm. Kein Quellcode wird geladen, nichts, nur:
Diese Seite funktioniert nicht
test.lembach-kr.de kann diese Anfrage momentan nicht verarbeiten.
HTTP ERROR 500
olape wrote:
Thu Sep 08, 2022 6:32 am
Das kann ich nicht nachvollziehen, auch nicht bei https://lembach-cmsimple.de/?404
Sorry, war blödes Beispiel (und ich weiß nicht wie man die automatische Verlinkung verhindert), ich habe schon während ich den vorherigen Post geschrieben habe, folgende .htaccess für die https://lembach-cmsimple.de erstellt (Herleitung Edit 10.09.22 - Seite mittlerweile etwas geändert):

Code: Select all

RewriteEngine On

# Redirect to SSL version
# ACHTUNG: Wenn die Domains kein HTTPS unterstützen müssen die beiden folgenden Zeilen auskommentiert werden!!!
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

# Redirect to non www version
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# Prevent 404 en non-existing folders
Options -MultiViews

# eigene Fehlerseiten

# Custom 400 errors
ErrorDocument 400 /?400

# Custom 401 errors
ErrorDocument 401 /?401

# Custom 403 errors
ErrorDocument 403 /?403

# Custom 404 errors - Damit flasche URLs nicht vor /?404 stehen der koplette Link
ErrorDocument 404 https://lembach-cmsimple.de/?404

# Custom 500 errors
ErrorDocument 500 /?500

# Default page
DirectoryIndex index.php

# Default contact email
SetEnv SERVER_ADMIN webmaster@lembach-cmsimple.de

# Force download
AddType application/octet-stream  .zip

# Default charset
AddDefaultCharset UTF-8

# Prevent directory navigation
Options All -Indexes

# Mod Rewrite
<IfModule mod_rewrite.c>
   RewriteEngine On
   Options +FollowSymlinks
   RewriteBase /

   #Block Spam Bots
   RewriteCond %{HTTP_USER_AGENT} ^(aesop_com_spiderman|alexibot|backweb|bandit|batchftp|bigfoot) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(black.?hole|blackwidow|blowfish|botalot|buddy|builtbottough|bullseye) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(cheesebot|cherrypicker|chinaclaw|collector|copier|copyrightcheck) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(cosmos|crescent|curl|custo|da|diibot|disco|dittospyder|dragonfly) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(drip|easydl|ebingbong|ecatch|eirgrabber|emailcollector|emailsiphon) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(emailwolf|erocrawler|exabot|eyenetie|filehound|flashget|flunky) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(frontpage|getright|getweb|go.?zilla|go-ahead-got-it|gotit|grabnet) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(grafula|harvest|hloader|hmview|httplib|httrack|humanlinks|ilsebot) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(infonavirobot|infotekies|intelliseek|interget|iria|jennybot|jetcar) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^(joc|justview|jyxobot|kenjin|keyword|larbin|leechftp|lexibot|lftp|libweb) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^web(zip|emaile|enhancer|fetch|go.?is|auto|bandit|clip|copier|master|reaper|sauger|site.?quester|whack) [NC,OR]
   RewriteCond %{HTTP_USER_AGENT} ^.*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures).*$ [NC]
   RewriteRule . - [F,L]
</IfModule>
Diese

Code: Select all

ErrorDocument 404 https://lembach-cmsimple.de/?404
Zeile ist der Workaround um die /?404 - Problematik.
Probier es mal an meiner alten Domain aus: http://cmsimple.lembach-kr.de/
Gib dort diese (nicht existierende) Adresse ein: http://cmsimple.lembach-kr.de/123
Und dann klicke auf einen Menü-Eintrag, z. B. Download. Ergebnis in der Adresszeile: http://cmsimple.lembach-kr.de/123?Download
und wieder wird die 404-Seite ausgegeben.

Da hätte ich schon wieder eine Frage:
Könnte die Ursache sein, dass in der userfuncs.php das steht:

Code: Select all

function custom_404()
{
    header('Location: ?404');
    exit;
}
und nicht /?404 als Ziel?

Und noch eins: Wenn ich diese Funktion statt dessen in ein Plugin packe, dann wird die /?404 nicht aufgerufen. Liegt es daran, dass bis zum Aufruf der index.php des Plugins der HTTP-Status schon nicht mehr der 404 ist? Ich hoffe ich hab mich klar ausgedrückt.
Last edited by Caravaner on Sat Sep 10, 2022 9:36 pm, edited 2 times in total.
Ich bin > 68 und lerne jeden Tag was Neues. Dafür vergesse ich was Anderes.
Der Trick ist, sich nicht darüber aufzuregen und morgen zu lernen, was man vorgestern vergessen hat. ;)
https://lembach-cmsimple.de

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

Re: Moved_XH

Post by olape » Fri Sep 09, 2022 6:39 am

Caravaner wrote:
Thu Sep 08, 2022 1:31 pm

Code: Select all

ErrorDocument 404 https://lembach-cmsimple.de/?404
So habe ich das schon lange.
Warum?
Wenn du mal http://cmsimple.lembach-kr.de/123/ aufrufst, also mit / am Ende,
Dann wirst du merken, dass XH allein aus der falschen Struktur nicht mehr herauskommt.
Die Angabe der vollen URL in der htaccess ist also schon mal gut, wenn man die Fehlerseiten unter XH erstellt.
Blöd ist das nur bei mehrsprachigen Websites, aber man kann eben nicht alles haben.
Man könnte ja auch eine einfache html-Page dafür hernehemen, dann würde die Verlinkung relativ genügen.
Ich habe das für alle Fehlerseiten gleich gemacht. Wobei für die 500 kannst du das weglassen.
Wenn es wirklich eine 500 gibt, dann wird XH nicht mehr ausgeführt, diese Page also auch nicht angezeigt.
401, 403, 404 und 410 reichen eigentlich aus, denke ich.

Insgesammt müsstest du deine htaccess mal etwas ordnen.

In der ersten Zeile fängst du ohne Abfrage mit

Code: Select all

RewriteEngine On
an.
Das ist OK, wenn man weiß, dass das Modul läuft.

Weiter unten dann aber plötzlich doch die Abfrage:

Code: Select all

<IfModule mod_rewrite.c>
...
Ich würde auch allgemeine Dinge

Code: Select all

# Default page
DirectoryIndex index.php

# Default contact email
SetEnv SERVER_ADMIN webmaster@lembach-cmsimple.de

# Force download
AddType application/octet-stream  .zip

# Default charset
AddDefaultCharset UTF-8

# Prevent directory navigation
Options All -Indexes
als erstes regeln
Dann stückweise den Rest.
Dabei beachten, dass es möglichst wenig Durchläufe gibt.

Also i.e nicht erst eine Umleitung für non-www auf http://
und nacher dann die Umleitung von http auf https://.
Das Beispiel kann in der Reihenfolge schon so bleiben, aber trotzdem auch bei non-www gleich auf https://.
Das nur als Denkanstoß.
Prinzipiell kann man die Reihenfolge schon recht frei gestalten.
Caravaner wrote:
Thu Sep 08, 2022 1:31 pm
Und noch eins: Wenn ich diese Funktion statt dessen in ein Plugin packe, dann wird die /?404 nicht aufgerufen. Liegt es daran, dass bis zum Aufruf der index.php des Plugins der HTTP-Status schon nicht mehr der 404 ist? Ich hoffe ich hab mich klar ausgedrückt.
Wenn ich das richtig im Kopf habe, dann klappert XH erst alle Plugins durch, ob diese direkt etwas ausgeben und ruft erst dann den Content auf.
Das heisst, es würde in dem Fall nur darauf ankommen, wie du die Funktion im Plugin zur Verfügung stellst.
XH muss diese direkt einbinden können. Das sollte eigentlich der Fall ein, wenn die Funktion in der index.php das Plugins steht oder in einer Datei die per include in die index.php des Plugins eingebunden ist.

Den Fehler 500 bei der bereits vorhandenen Funktion in der userfuncs.php könntes du im Plugin mit

Code: Select all

if (!function_exists('custom_404')) {
    function custom_404()
    {
        header('Location: ?404');
        exit;
    }
}
abfangen.

Kleiner Nachtrag

Code: Select all

ErrorDocument 404 https://lembach-cmsimple.de/?404
Nicht vergessen, der Fehlerseite noch den richtigen Statuscode 404 einzuhauchen.
Sonst bekommt die Suchmachine eine 302 gefolgt von einer 200, statt 302 gefolgt von 404.

Caravaner
Posts: 101
Joined: Sat Oct 05, 2019 5:20 pm
Location: Wadgassen (Saarland)
Contact:

Re: Moved_XH

Post by Caravaner » Fri Sep 09, 2022 11:30 am

Zuersteinmal: Danke für die Antwort!
Zum Zweiten: Sollten wir den Moderator (keine Ahnung wo ich finden kann wer das ist, sonst würde ich ihn selber fragen) nicht bitten alle Beiträge hier, die sich mit der "Aufzucht, Pflege und Benutzung" der .htaccess befassen, in ein neues Thema ".htaccess - Aufbau, Gliederung, Möglichkeiten, Probleme und Lösungen" in deutschsprachigen Forum zu verschieben? Wenn man es genau nimmt, gehört das alles nicht unmittelbar zu Moved_XH.
olape wrote:
Fri Sep 09, 2022 6:39 am
Dann wirst du merken, dass XH allein aus der falschen Struktur nicht mehr herauskommt.
Das hatte ich versucht zu beschreiben.
olape wrote:
Fri Sep 09, 2022 6:39 am
Man könnte ja auch eine einfache html-Page dafür hernehemen
Das hatte ich auch schon mal, da ist aber die Optik nicht unbedingt zum aktiven Template passend (auf anderer Subdomain nutze ich den Templateswitscher).

Wegen des Durcheinanders in meiner .htaccess: Ich habe keine Ahnung wie die Funktioniert, was da geschieht und auch nich was ich da tue. Ich habe nur übernommen, was mir Online-Generatoren geliefert haben. Daher mein Hinweis
Caravaner wrote:
Thu Sep 08, 2022 1:31 pm
(Herleitung)
Insbesondere habe ich keine Ahnung wie diese komplexen Ausdrücke (das richtige Fachwort will mir nicht einfallen) funktionieren, die man augenscheinlich bei RewriteRule verwenden muss.
Offensichtlich habe ich es nicht geschafft, die richtige Suchanfrage zu stellen, denn bis jetzt habe ich noch keinen deutschsprachigen Artikel im Netz gefunden, den ich zum Lernen dessen benutzen könnte, was Du mir gerade Erklären willst.
olape wrote:
Fri Sep 09, 2022 6:39 am
if (!function_exists('custom_404')
Das habe ich auch (gehabt) bis ich festgestellt habe, dass die eigene 404-Seite nicht mehr ohne .htaccess-Weiterleitung aufgrufen wird.
Ich werde Deine Hinweise allesamt umsetzen. Ich wäre sehr froh, wenn Du mir sagen könntest, wo ich Lesestoff zum Thema .htaccess und Aufbau dieser komplexen Ausdrücke finde.

Im Moment muss ich jedoch vordringlich suchen, was mit meinem CMSimple_XH nicht mehr stimmt, denn die function custom_404() wird bei mir definitiv nicht mehr ausgeführt! Irgendwan hat sich in meiner lokalen Mustervorlage des CMS ein Fehler eingeschlichen und dere steckt jetzt in allen meinen Webs :cry: :o :cry:.
Ich bin > 68 und lerne jeden Tag was Neues. Dafür vergesse ich was Anderes.
Der Trick ist, sich nicht darüber aufzuregen und morgen zu lernen, was man vorgestern vergessen hat. ;)
https://lembach-cmsimple.de

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

Re: .htaccess ErrorDocument

Post by olape » Fri Sep 09, 2022 12:01 pm

Caravaner wrote:
Fri Sep 09, 2022 11:30 am
Wegen des Durcheinanders in meiner .htaccess: Ich habe keine Ahnung wie die Funktioniert, was da geschieht und auch nich was ich da tue. Ich habe nur übernommen, was mir Online-Generatoren geliefert haben.
Durcheinander ... Es funktioniert
Aber man kann es etwas übersichtlicher gestalten. Aber auch da hat jeder andere Vorstellungen.
Von daher, alles gut.
Caravaner wrote:
Fri Sep 09, 2022 11:30 am
Insbesondere habe ich keine Ahnung wie diese komplexen Ausdrücke (das richtige Fachwort will mir nicht einfallen) funktionieren, die man augenscheinlich bei RewriteRule verwenden muss.
Offensichtlich habe ich es nicht geschafft, die richtige Suchanfrage zu stellen, denn bis jetzt habe ich noch keinen deutschsprachigen Artikel im Netz gefunden, den ich zum Lernen dessen benutzen könnte, was Du mir gerade Erklären willst.
Das sind zwei verschiedene Dinge.
Das eine ist htaccess und der entsprechende Syntax, das andere sind "Reguläre Ausdrücke".
Zu htaccess selber gibt es hunderte Sites im Netzt, da ist immer was zu finden.
Reguläre Ausdrücke, da ist es vielleicht nicht ganz so einfach eine halbwegs verständliche Erklärung zu finden.
Die Erklärungen haben dann ganz grundsätzlich auch nichts mit der htaccess zu tun.
Reguläre Ausdrücke haben ihre Anwendung in vielen Gebieten.

https://danielfett.de/2006/03/20/regula ... -tutorial/
Caravaner wrote:
Fri Sep 09, 2022 11:30 am
Im Moment muss ich jedoch vordringlich suchen, was mit meinem CMSimple_XH nicht mehr stimmt, denn die function custom_404() wird bei mir definitiv nicht mehr ausgeführt! Irgendwan hat sich in meiner lokalen Mustervorlage des CMS ein Fehler eingeschlichen und dere steckt jetzt in allen meinen Webs
Da kann ich dir so jetzt nicht wirklich helfen.
Hier https://lembach-cmsimple.de jedenfalls scheint es zu funktionieren.

cmb
Posts: 14051
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: .htaccess ErrorDocument

Post by cmb » Fri Sep 09, 2022 12:42 pm

Caravaner wrote:
Thu Sep 08, 2022 1:31 pm
Da hätte ich schon wieder eine Frage:
Könnte die Ursache sein, dass in der userfuncs.php das steht:

Code: Select all

function custom_404()
{
    header('Location: ?404');
    exit;
}
und nicht /?404 als Ziel?
Möglich. Probier's doch einfach mal mit folgendem:

Code: Select all

function custom_404()
{
    header('Location: " . CMSIMPLE_URL . "?404');
    exit;
}
Allerdings frage ich mich, ob so das ErrorDocument der Apache-Konfiguration überhaupt genutzt wird. Schließlich triggerst du damit einen Redirect, und der sollte eigentlich einen 302 Status-Code erzeugen.
Christoph M. Becker – Plugins for CMSimple_XH

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

Re: .htaccess ErrorDocument

Post by olape » Fri Sep 09, 2022 1:22 pm

cmb wrote:
Fri Sep 09, 2022 12:42 pm
Schließlich triggerst du damit einen Redirect, und der sollte eigentlich einen 302 Status-Code erzeugen.
Genau so ist es. Schlußendlich braucht die Page noch den Statuscode 404.

frase
Posts: 4892
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Moved_XH

Post by frase » Fri Sep 09, 2022 3:17 pm

olape wrote:
Fri Sep 09, 2022 6:39 am
Kleiner Nachtrag

Code: Select all

ErrorDocument 404 https://lembach-cmsimple.de/?404
Nicht vergessen, der Fehlerseite noch den richtigen Statuscode 404 einzuhauchen.
Sonst bekommt die Suchmachine eine 302 gefolgt von einer 200, statt 302 gefolgt von 404.
Und:
Quelle unbekannt wrote:Hinweis:
Diese 404-Seite (eine selbst erstellte) sollte richtigerweise einen passenden Status-Code für Suchmaschinen senden.
Füge deshalb an beliebiger Stelle im Quelltext dieser Seite folgendes ein:

Code: Select all

<div>#⁣cmsimple header('HTTP/1.1 404 Not Found');#</div>
Je nach Gegebenheiten könnte statt HTTP/1.1 auch HTTP/2 nötig sein.
Dazu mal ein Frage eines völlig Unwissenden:
Wenn eine Seite nicht auffindbar ist, wird 404 gesendet (??? stimmt das ???) und anschließend umgeleitet (je nachdem auf eine XH-Seite oder eine HTML-Seite).
Warum sollte die Seite, auf die umgeleitet wird noch einmal 404 senden?
Diese Seite ist doch existent und sollte 200 senden - oder bin ich da fallig völsch?

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

Re: .htaccess ErrorDocument

Post by olape » Fri Sep 09, 2022 3:41 pm

frase wrote:
Fri Sep 09, 2022 3:17 pm
Wenn eine Seite nicht auffindbar ist, wird 404 gesendet (??? stimmt das ???) und anschließend umgeleitet (je nachdem auf eine XH-Seite oder eine HTML-Seite).
Eigentlich wird nur 404 gesendet, wenn der Apache selber den Fehler generiert, glaube ich wenigstens.
Schon mit der eigenen Fehlerseite wird daraus eine 302, jedenfalls bei der Angabe einer vollen URL.
Aber ich glaube mich zu erinnern, das war auch bei der relativen Pfadangabe so.
Wenn XH selber, also wir sprechen hier über die quasi Standardfunktion 404 in der userfuncs.php, zur eigenen Fehlerseite weiterschickt, ist es auch eine 302. Deswegen braucht die 404 den entsprechenden Status.
Setzt man den nicht, kommt es sehr wahrscheinlich zu einem Soft-404.
Das aber bitte selber erlesen, das wird mir zu viel Schreiberei. ;)

Nachtrag
Vielleicht hier, da ist das ganz gut beschrieben.
https://www.seobility.net/de/wiki/Soft_404

cmb
Posts: 14051
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Moved_XH

Post by cmb » Fri Sep 09, 2022 3:51 pm

frase wrote:
Fri Sep 09, 2022 3:17 pm
Warum sollte die Seite, auf die umgeleitet wird noch einmal 404 senden?
Diese Seite ist doch existent und sollte 200 senden - oder bin ich da fallig völsch?
Ganz allgemein (nicht CMSimple_XH spezifisch): i.d.R. wird bei 404 auf eine spezielle "Not Found" Seite weitergeleitet; damit Bots (insbesondere Suchmachinen) nicht denken, dass die Weiterleitung eben einfach so gewünscht ist, sollte die Seite wieder 404 melden. Schönes Beispiel wie es nicht sein sollte:

Code: Select all

https://www.php.net/gibtesnicht
Ich will das nicht verlinken, weil eben die URL indexiert werden könnte.
Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 4892
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: .htaccess ErrorDocument

Post by frase » Fri Sep 09, 2022 3:53 pm

olape wrote:
Fri Sep 09, 2022 3:41 pm
Eigentlich wird nur 404 gesendet, wenn der Apache selber den Fehler generiert.
Okay, ich dachte, wenn eine Seite nicht gefunden wird, dann wirft der Apache (darf man das noch sagen? ;)) die 404 selbst und der Robot hat seine Info.
Wie das wirklich läuft, weiß ich aber immer noch nicht.
Aber, lass' gut sein.
Du willst nicht viel schreiben - und ich will nicht viel lesen ;)
Merken wir uns:
Auf der eigenen 404-Seite sollte der passende Status-Code mitgesendet werden.

Post Reply