Tach!
Neuer, getesteter Lösungsansatz:
#A
in der Realm einen Hinweis auf den Abbruch hinterlegen
#B
ein Error-Dokument eingerichten
#C dieses leitet dann im Falle des Abbruches zu http://forum.de.selfhtml.org/?foo=bar (oder was immer im Query-String stand) um.
Bist du sicher, dass das funktioniert? Ich habe das mal eingebaut (vorsichtshalber unter /myphp/) und sehe, dass es nicht geht. Das ErrorDocument wird ja nicht erst im Falle eines Abbruchs angefordert sondern ist Teil der Response.
Das ist der Inhalt des 401er-ErrorDocuments:
<?php
header('Location: http://' . $_SERVER['SERVER_NAME'] . '/?' . (empty($_SERVER['REDIRECT_QUERY_STRING']) ? '' : $_SERVER['REDIRECT_QUERY_STRING']));
Mein 401er ErrorDocument wird aufgerufen. Das sehe ich, wenn ich statt Weiterleitung einen Text einbaue und die Anmeldung abbreche. Aber wenn ich die Weiterleitung drin habe, wird kein Anmelde-Dialog angezeigt sondern sofort weitergeleitet. Der Grund ist, dass der Location-Header PHP veranlasst, einen 302 als Statuscode zu senden (also fast wie bei dir, nur mit der richtigen Zahl). Dieser überschreibt natürlich den 401 - was soll er auch sonst tun? Und damit bekommt der Browser keine 401 als Antwort, zeigt keinen Anmelde-Dialog und macht gleich einen Redirect.
Und nun das ganze auch noch mit Perl unter /mypl/ - Resultat ist daselbe (auch mit deiner 301).
Bei meinem Test habe ich keine Zugangsdaten eingegeben, mein Browser hatte also zu keinem Zeitpunkt welche für myphp oder mypl, er konnte also nicht bereits welche mitsenden. Das ist genau das Szenario, was in freier Wildbahn anzutreffen ist. Insofern sieht es zunächst erfolgreich aus, wenn man auf ohne-my geleitet wird. Aber nun kann man sich nicht mehr anmelden, weil man beim Versuch auf myphp/mypl zu kommen ja auch ohne Eingabedialog weggeschubst wird.
print "Status: 301 FOUND\nLocation: http://localhost/index.php?", $ENV{'REDIRECT_QUERY_STRING'}, "\n\n";
301 ist Moved Permanently und 302 ist Found.
dedlfix.