it-swarm.com.de

Wie kann ich die standardmäßige 403-verbotene Fehlerseite zwangsweise ausgeben, wenn http://example.com/not_found angefordert wird?

Dies ist meine erste Frage zu StackExchange. Nehmen Sie also bitte Kontakt mit mir auf. Hier ist eine kurze Übersicht über mein aktuelles Setup:

  • Zwei verschiedene Domänen, zwei verschiedene TLDs (. Dk und . De ) auf dem gleichen Hosting-Plan
  • nehmen wir aus Datenschutzgründen an, dass die Domain-Namen "Beispiel-Website" sind, d. h. https://www.example.dk und https://www.example.de
  • SSL auf beiden Domains eingerichtet
  • WordPress-gesteuert, mit WPML, um den übersetzten Inhalt entsprechend bereitzustellen

Das Problem ist, ich bekomme eine verrückte Menge Hits (aus Ländern wie China, Indien und Pakistan) für /not_found am Ende von beiden Domainnamen 'URLs in allen möglichen Formaten:

  • sicher zusammen mit dem www-Protokoll (https://www.example....../not_found)
  • sicher, ohne das www-Protokoll (https://example....../not_found)
  • nicht sicher, zusammen mit dem WWW-Protokoll (http://www.example....../not_found)
  • nicht sicher, ohne das www-Protokoll (http://eksemp....../not_found)

Für mich handelt es sich bei diesem eigentümlichen Muster höchstwahrscheinlich nur um Schwachstellenüberprüfungsversuche, insbesondere unter Berücksichtigung der Tatsache, dass der Inhalt der Websites entweder auf Dänisch oder Deutsch verfasst ist. Darüber hinaus richten sich die Websites an eine bestimmte dänische oder deutsche Zielgruppe, sodass es sehr unwahrscheinlich ist, dass die Websites für Besucher aus diesen asiatischen Ländern einen Besuch wert sind. Die Antwort des Servers ist derzeit die 404-nicht gefundene Seite, die von dem von uns verwendeten WordPress -Thema bereitgestellt wird. Meiner Meinung nach ist dies nicht ideal, da ich lieber möchte, dass ihnen der Zugriff auf diese URL verweigert wird wenn es nicht wirklich existiert.

Um es kurz zu machen, ich habe in den letzten Tagen Mühe gehabt, herauszufinden, wie der Webserver die 403-verbotene Seite zwangsweise ausgeben kann statt der 404, da die angegebene URL nicht auf dem Server vorhanden ist.

Ich habe ein regulärer Ausdruck erstellt, das ich in der Datei .htaccess als Muster verwenden möchte, das alle oben genannten Szenarien abdeckt (4 für jeden Domainnamen). Der Teil des Codes, den ich in .htaccess eingefügt habe, lautet wie folgt

# BEGIN /not_found blocking
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(https{0,1}:\/\/)(www\.){0,1}(example\.dk|example\.de){1}(\/not_found){1}$
RewriteRule . - [R=403,NC]
</IfModule>
# END /not_found blocking

aber leider funktioniert es nicht, da ich immer noch die 404-nicht gefundene Fehlerseite anstelle von 403 Access Forbidden erhalte. Es muss meine Schuld sein, aber was ist der Grund?

Jede Hilfe wäre sehr dankbar. Danke vielmals!

4
GeekRider
RewriteCond %{REQUEST_URI} ^(https{0,1}:\/\/)(www\.){0,1}(eksempelhjemmeside\.dk|eksempelhjemmeside\.de){1}(\/not_found){1}$
RewriteRule . - [R=403,NC]

Sie scheinen die Dinge hier viel zu kompliziert zu machen. Die Servervariable REQUEST_URI enthält nur den URL-Pfad, d. /not-found. Und das ist alles, worüber Sie anscheinend besorgt sind. Sie müssen nicht nach der Domain suchen, www/non-www, HTTP/HTTPS, da Sie ohnehin alle Variationen abgleichen möchten. Es sei denn, es gibt andere Subdomains usw., die Sie nicht fangen möchten? (Aber in diesem Fall ist es möglicherweise einfacher, die Ausnahmen als das Ziel abzugleichen?)

Wie @closetnoc in Kommentaren angedeutet hat, würde ich dennoch ein einfaches "404 Not Found" für diese Anfragen zurückgeben - da dies das ist, was sie sind. Mit "einfach" meine ich den Standard-Apache 404, so dass Sie früh ausfallen, anstatt die Anfrage über WordPress weiterzuleiten, was gerade passiert. Also, alles was Sie brauchen ist etwas wie das folgende vor der WordPress Front-Controller:

# BLOCK /not_found
RewriteRule ^not_found$ - [R=404]

Keine Notwendigkeit für den Wrapper <IfModule>, die Direktive RewriteEngine (da diese bereits im Block WP enthalten ist) oder die Direktive RewriteCond. Wenn Sie einen anderen Statuscode als 3xx angeben, benötigen Sie auch nicht das Flag L (last) (dies ist impliziert).

Möglicherweise möchten Sie das Flag NC (nocase) einfügen, wenn Sie Anforderungen für /NoT_FounD und/oder /NOT_FOUND usw. erhalten. Andernfalls sollte dies jedoch weggelassen werden.

Beachten Sie, dass in .htaccess der mit RewriteRuleMuster übereinstimmende URL-Pfad den Schrägstrich nicht enthält. Das Muster^not_found$ stimmt also nur mit der URL /not_found überein.

Wenn Sie als akademische Übung ein "403 Forbidden" anstelle eines 404 zurückgeben möchten, ändern Sie die obige Anweisung in:

RewriteRule ^not_found$ - [F]

Auch hier ist das Flag L nicht erforderlich, wenn das Flag F verwendet wird. Alternativ können Sie stattdessen R=403 schreiben, aber F ist die bevorzugte Verknüpfung.

1
MrWhite

Ich benutze diesen Htaccess-Code, um bestimmte Wörter von URLs zu entfernen und auf die Homepage umzuleiten. Ich habe es für deine Situation modifiziert. Ich habe diese Version nicht getestet, aber ich denke, es sollte funktionieren. Ich bin mir nicht sicher, ob für den Unterstrich etwas extra getan werden muss oder nicht.

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)not_found(.*)$ $1$2  [R=301,L]

Sie können einfach die Seite/not_found erstellen und in PHP den Header-Status auf 403 setzen

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';
0
Michael d