2017-05-31 4 views

Antwort

1

Sie können die SERVER_PROTOCOL Variable in einer Mod-Rewrite-Klausel überprüfen. Stellen Sie sicher, dass Sie diese Regel als erste setzen.

RewriteEngine On 
RewriteCond %{SERVER_PROTOCOL} ^HTTP/1\.0$ 
RewriteCond %{REQUEST_URI} !^/path/to/403/document.html$ 
RewriteRule^- [F] 

Die zusätzliche negative Kontrolle für !^/path/to/403/document.html$ ist so, dass die verbotene Seite kann die Benutzer angezeigt. Es würde sonst zu einer Rekursion führen.

0

Wenn Sie sich auf einem namensbasierten virtuellen Host befinden (und jeder virtuelle Server nicht seine eigene separate IP-Adresse hat), ist es technisch unmöglich, eine Verbindung zu Ihrem virtuellen Host über HTTP/1.0 herzustellen. Nur der Standardserver - der erste definierte virtuelle Server - ist verfügbar. Dies liegt daran, dass HTTP/1.0 den HTTP-Hostanforderungsheader nicht unterstützt und der Hostheader für namensbasierte virtuelle Hosts erforderlich ist, um den virtuellen Host auszuwählen, an den die Anforderung gerichtet ist. In den meisten Fällen ist die Antwort auf eine echte HTTP/1.0-Anfrage eine 400-Bad-Anfrage. Wenn Sie es geschafft haben, dass dieser Code funktioniert, aber später versucht hat, benutzerdefinierte Fehlerdokumente zu verwenden (siehe Apache core ErrorDocument-Anweisung), dann Das Ergebnis der Blockierung einer Anfrage wäre eine "unendliche" Schleife: Der Server würde versuchen, mit einem 403-Forbidden-Response-Code zu antworten und das benutzerdefinierte 403-Fehlerdokument zu liefern. Aber das würde zu einem weiteren 403-Fehler führen, weil Zugriff auf alle Ressourcen - einschließlich der benutzerdefinierten 403-Seite - verweigert wird. Der Server würde also einen weiteren 403-Fehler erzeugen und dann versuchen, darauf zu antworten, indem er einen weiteren 403 erstellt, und noch einen und einen weiteren ... Dies würde so lange weitergehen, bis entweder der Client oder der Server aufgab.

Ich würde vorschlagen, so etwas wie:

SetEnvIf Request_Protocol HTTP/1\.0$ Bad_Req 
SetEnvIf Request_URI ^/path-to-your-custom-403-error-page\.html$ 
Allow_Bad_Req 
#Order Deny,Allow 
Deny from env=BadReq 
Allow from env=Allow_Bad_Req 

In mod_rewrite, so etwas wie:

RewriteCond %{THE_REQUEST} HTTP/1\.0$ 
RewriteCond %{REQUEST_URI} !^/path-to-your-custom-403-error-page\.html$