Zur Navigation

Request exceeded the limit of 10 internal redirects

1 Jan

Hallo Jörg,

SetEnvIfNocase referer "^https?://.*(pamjatnik|petritual|velesritual|ritual|imperium|games|webtime|webzarobitok|pharma|.ru/)" refspam=1
etc.
order allow,deny
deny from env=refspam
allow from all

Damit habe ich keine Probleme, die Anfrage wird mit einem 403er beantwortet.

Jetzt wollte ich die Referer via

<IfModule mod_rewrite.c>

RewriteCond %{HTTP_REFERER} ".*(pamjatnik|petritual|velesritual|ritual|imperium|games|webtime|webzarobitok|pharma|.ru/).*" [NC,OR]
etc. ...
RewriteRule .* - [R=417,L]

</IfModule>

Allerdings bekomme ich bei dieser Änderung diese Fehlermeldung:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: xyz

Es existiert

ErrorDocument 417 /417.php

welches auch an derer Stelle problemlos arbeitet, z.B

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/xmlrpc\.php$
RewriteRule .* - [R=417,L]
</IfModule>

In 417.php, damit experimentiere ich gerade, werden Angaben verarbeitet, gespeichert und danach wird der Besucher auf den Localhost verabschiedet.

Aber wieso kommt es zum Fehler "Request exceeded the limit of 10 internal redirects ..." wenn ich den Referer via Rewrite aussortieren möchte? Siehst du da meinen Fehler?

Danke für deine Aufmerksamkeit!

Mit freundlichen Grüßen - Jan

13.03.2023 21:10

2 Jörg Kruse

Das liegt vielleicht an dem "etc. ..."?

Und wie hast du das getestet: mit einem Browser-Addon den Referrer hinzugefügt?

Ich würde auch noch einen Blick in das Access Log werfen, hinsichtlich Besonderheiten der jeweils zehn aufeinanderfolgenden Requests.

Der Status Code 417 ist eigentlich eine Antwort auf den Client-Header "Expect: 100-continue"

14.03.2023 11:15 | geändert: 14.03.2023 11:22

3 Jan

Hallo Jörg,

Das liegt vielleicht an dem "etc. ..."?

;-) Daran sicher nicht, hatte es nur abgekürzt.

Die Regel ansich

RewriteCond %{HTTP_REFERER} ".*(pamjatnik|petritual|velesritual|ritual|imperium|games|webtime|webzarobitok|pharma|.ru/).*" [NC,OR]
etc. ...

stimmt aber scho, oder? Beim letzten Eintrag natürlich ohne OR ;-)

Den Code 417 hatte ich willkürlich zum testen gewählt.

Mit dem prüfen des Referers hatte ich Probleme, mit dem Add-On Referer Modifier hab ich es aber jetzt hinbekommen und getestet.

RewriteCond %{HTTP_REFERER} ".*(4711|4813).*" [NC]
RewriteRule .* - [R=417,L]

Im error_log gibt es die im Betreff genannte Fehlermeldung,
im access_log einen ErrorCode 500 und eine weiße Seite mit der Meldung

Expectation Failed

No expectation was seen, the Expect request-header field was not presented by the client.

Only the 100-continue expectation is supported.

Additionally, a 417 Expectation Failed error was encountered while trying to use an ErrorDocument to handle the request.

Da stehe ich jetzt auf dem Schlauch :-( Der Besuch des Referes soll halt, mit welchem Code auch immer, auf das Script 417.php umgeleitet werden.

Da muss ich jetzt aufgeben, bekomme ich nicht hin. :-/

Mit freundlichen Grüßen - Jan

14.03.2023 20:25

4 Jörg Kruse

Das liegt vielleicht an dem "etc. ..."?

;-) Daran sicher nicht, hatte es nur abgekürzt.

Na, ich dachte schon an dem, was sich dahinter verbirgt. Aus dem ungünstigen Zusammenspiel von Bedingungen könnten sich auch Endlosweiterleitungen ergeben.

Den Code 417 hatte ich willkürlich zum testen gewählt.

Der ist in dem Fall aber nicht angebracht, weil er eine Antwort auf den Client-Header "Expect: 100-continue" sein muss. Das hat dann ja auch der Webserver bemängelt:

Expectation Failed

No expectation was seen, the Expect request-header field was not presented by the client.

Only the 100-continue expectation is supported.

Angebracht wäre hier eher ein Status-Code 403, der mit dem F-Flag erzeugt werden kann:

RewriteRule .* - [F,L]

Dafür kannst du auch eine PHP-Datei als Error document bereithalten:

ErrorDocument 403 /bad-bots.php

Additionally, a 417 Expectation Failed error was encountered while trying to use an ErrorDocument to handle the request.

Da stimmt vielleicht der Pfad noch nicht.

Wobei dies auch noch problematisch sein könnte:

In 417.php, damit experimentiere ich gerade, werden Angaben verarbeitet, gespeichert und danach wird der Besucher auf den Localhost verabschiedet.

Eine serverseitige Weiterleitung nach http://localhost/ benötigt einen Status Code, welcher mit einer 3 beginnt, das beißt sich mit der 417 bzw. 403. Möglicher Workaround wäre, in der .htaccess Datei keinen Status Code zu erzeugen, sondern den Request URI intern auf die PHP-Datei umzuschreiben:

RewriteRule .* bad-bots.php [L]

In bad-bots.php kannst du dann serverseitig nach http://localhost/ weiterleiten.

15.03.2023 10:22

5 Jan

Hallo Jörg,

Danke für deine ausführliche und hilfreiche Antwort! Das schaue ich mir nochmal genauer an.

Mit freundlichen Grüßen - Jan

PS:

ErrorDocument 403 /bad-bots.php

Wie definiere ich denn den Eintrag so das er eben nicht global für alle 403er gilt?, sondern nur für die RewriteRule? Also Error 403 melden und die PHP ausführen.

19.03.2023 19:35 | geändert: 19.03.2023 19:59

6 Jörg Kruse

Wie definiere ich denn den Eintrag so das er eben nicht global für alle 403er gilt?, sondern nur für die RewriteRule? Also Error 403 melden und die PHP ausführen.

Ich würde dann die zweite Variante nehmen, also intern auf die bad-bots.php umleiten:

RewriteRule .* bad-bots.php [L]

Darin kannst du dann den entsprechenden Status Code mit http_response_code() ausgeben:

<?php
http_response_code(403);
// uebriger Code

Eine Weiterleitung sollte dann aber nicht in dem Code enthalten sein! Diese würde stattdessen einen Status 301 oder 302 erfordern:

<?php
http_response_code(301);
header('Location: http://localhost/'); 
// uebriger Code

19.03.2023 20:59

7 Jan

Hallo Jörg,

<IfModule mod_rewrite.c>

RewriteCond %{HTTP_REFERER} (pamjatnik|petritual|velesritual|ritual|imperium|games|webtime|webzarobitok|sexrasskaz|pharma|.ru/) [NC,OR]
RewriteCond %{HTTP_REFERER} (pro-groshi|sladent|na-kartu|anime|club|simplesite|store|pamiatnyky|.top|365|expert|.xyz/) [NC,OR]
RewriteCond %{HTTP_REFERER} (cardan|shaft|obzor|moidodir|erolate|dubai|turk|capital|kupus|klimcity|polmsk|marketing|inartdeco) [NC,OR]
RewriteCond %{HTTP_REFERER} (simplesite|money|anonymousfox|allkrim|xn----|vzlomannye|aboutbetunlim|sexpornotales|sexreliz|betunlim|udrua) [NC]
RewriteRule .* /423.php [L]

</IfModule>

423.php

<?

... Abfragen $_SERVER['REMOTE_ADDR']; etc.
... Schreiben in Textdatei

header("Location: http://127.0.0.1");
exit ();
?>

423.php ist identisch mit 417.php die an anderer Stelle und Rewrite ohne Probleme arbeitet.

Und wieder hat es mit dem Referer nicht geklappt :-(

94.142.141.0 - - [19/Mar/2023:20:23:11 +0100] "HEAD / HTTP/1.1" 500 - "//itcompanion.ru/nastrojka-i-obsluzhivanie-orgetexniki-mfu/" "Mozilla/5.0 (compatible; MSIE5.00; Windows 2003)"

...

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: //itcompanion.ru/nastrojka-i-obsluzhivanie-orgetexniki-mfu/

https:// im Referer hab ich entfernt um keinen Link zu setzen.

Ich muss da einen Fehler machen und sehe einfach nicht wo der ist! Lasse ich die Referer via SetEnvIfNocase (order allow,deny etc) bearbeiten gibt es keine Probleme.

Da muss ein dickes Brett vor meiner Stirn hängen! ;-)

Mit freundlichen Grüßen - Jan

19.03.2023 22:37

8 Jörg Kruse

Bei einer internen Umleitung in der .htaccess Datei muss der "leading Slash" weggelassen werden:

RewriteRule .* 423.php [L]

20.03.2023 11:45

1 Forenmitglied fand diesen Beitrag gut

9 Jan

Hallo Jörg,

und wie so oft ... du hast es mal wieder auf den Punkt gebracht! Funktioniert jetzt!

Danke!

Mit freundlichen Grüßen - Jan

20.03.2023 19:06

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]