2010-07-26 2 views
1

Je comprends comment interdire une adresse IP de mon serveur web apache en utilisant .htaccess:page interdiction personnalisée pour le site Web homebrew

order allow,deny 
deny from 192.168.44.201 
deny from 224.39.163.12 
deny from 172.16.7.92 
allow from all 

Je voudrais créer une coutume « Vous avez été banni » page. Comment pourrais-je faire ça?

EDIT:

Pour clarifier les choses, je suis pas essayer de créer une page personnalisée 403, car ceux-ci sont utilisés dans d'autres cas aussi bien (par exemple échoué l'authentification de base, etc.). Le plus proche que je suis venu à ce jour est:

rewritecond %{REMOTE_ADDR} ^127\.0\.0\.1$ 
RewriteRule !^banned$ /banned [NC,L] 

mais cela produit une erreur de serveur interne lorsque l'adresse IP est adaptée, au lieu d'envoyer l'utilisateur/interdit

Répondre

3

Les autres réponses qui suggèrent un ErrorDocument pour le code 403 seraient la manière habituelle de faire ceci. Mais comme vous voulez afficher une page d'erreur différente si l'utilisateur se voit refuser l'accès en fonction de l'adresse IP (par opposition à d'autres raisons), vous pouvez utiliser mod_rewrite, comme vous le suspectiez.

RewriteCond %{REMOTE_ADDR} =192.168.44.201 [OR] 
RewriteCond %{REMOTE_ADDR} =224.39.163.12 [OR] 
RewriteCond %{REMOTE_ADDR} =172.16.7.92 
RewriteRule !^/banned.html /banned.html [L] 

P.S. Cela devrait aller dans votre configuration d'hôte virtuel, pas un fichier .htaccess, si possible. Si vous n'avez pas accès au fichier de configuration de l'hôte virtuel, vous pouvez le placer dans un fichier .htaccess, mais supprimer la barre oblique du motif RewriteRule (le !^/banned.html devient !^banned.html).

+0

Merci, c'est ce slash qui gâchait mes erreurs de serveur interne.Je rencontre un autre problème - j'ai déjà une règle de réécriture dans mon fichier htaccess, et je reçois des erreurs de serveur interne si je ne commente pas la première. Qu'est-ce que je fais mal? – Mala

+0

C'est difficile à dire sans voir quelle est la première règle de réécriture. –

+0

ah désolé. Le voici: http://flyingmonkey.nfshost.com/misc_files/htaccess.txt – Mala

2

Vous utilisez une directive ErrorDocument. Les gens qui voient refuser l'accès sont envoyés un en-tête 403, donc:

ErrorDocument 403 banned.html 

Redirigera interdit les gens à banned.html


Edit: L'autre alternative est de laisser tomber les choses de mod_access tout à fait, et utiliser un Règle de réécriture basée sur IP (comme mentionné dans la question). Il devrait juste être:

RewriteEngine on 
RewriteCond %{REMOTE_ADDR} 192.168.44.201 [OR] 
RewriteCond %{REMOTE_ADDR} 224.39.163.12 [OR] 
RewriteCond %{REMOTE_ADDR} 172.16.7.92 
RewrulteRule .* banned.html [L] 


Edit 2: David m'a battu à une réponse presque identique; Je pense que his way est ce que vous voulez

+0

Bien que ce soit effectivement utile, il en résulterait des messages "bannis" à chaque fois que quelqu'un rencontre une erreur 403 – Mala

+1

@Mala Eh bien ... oui, n'est-ce pas le point? Est-ce que vous servez des codes d'erreur 403 pour des situations autres que celle-ci? –

+0

Si les autorisations de fichier sont définies pour qu'un utilisateur ne puisse pas lire un document ou échoue à l'authentification de base, il doit obtenir une erreur 403. Cependant, il ne sera pas banni – Mala

1

Dans votre fichier .htaccess:

ErrorDocument 403 /banned.html 

changement /banned.html à tout chemin/vers/nom de fichier que vous voulez.

Questions connexes