8710 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Je voudrais rediriger un IP vers une page du même site. La procédure qui suit fonctionnera très bien sur une URL externe, mais bien évidemment produira une boucle lorsque l’on veut rediriger vers une page du même site.


# Activation de la réécriture des URL.
RewriteEngine on

# Blocage de spammeurs
RewriteCond %{REMOTE_ADDR} ^23.21.196.83 [OR]
RewriteCond %{REMOTE_ADDR} ^23.21.196.83

# Redirection des vilains
RewriteRule .*   http://www.google.fr/   [R=302,L]


Comment faire pour éviter la boucle ?
IL doit y avoir moyen d'ajouter une condition négative de ce genre :

RewriteCond %{REQUEST_URI} !^/page-pas-bloquee.php$
Merci pour vos réponses.

@jb_gfx

Le PHP intervient après l’arrivée du visiteur sur le site tandis que .htaccess intervient avant. Je préférerais rediriger ces visiteurs-là avant. Je vois un autre écueil avec le PHP : la liste des IP interdits est souvent conséquente et il ne faudrait pas que les tests augmentent le temps d’accès pour les autres visiteurs. Vaudra-t-il mieux utiliser des switch case, des elseif ou des or and ?

@QuentinC

Remote_addr indique l’adresse IP du client.
Request_URI est seulement l’URI (par exemple /index.php) qui a été fourni par le client. En pratique ce genre de visiteurs ne le fournit pas, en propose un falsifié et le change souvent.
J’imagine toutefois que comme pour le détournement des pages 404 il doit bien être possible de rediriger facilement les IP refusés par une commande .htaccess du genre :
Errordocument 123 page-des-IP-interdit.php

Maintenant, on pourrait se demander pourquoi ne pas utiliser une commande deny from et vouloir rediriger vers une page. Il peut arriver qu’un internaute utilise un IP issu d’un réseau privé virtuel. Sur la page de redirection, je lui indiquerais comment me contacter malgré tout.
Modifié par Pyanepsion (12 Oct 2013 - 10:43)
Pour le coup, deny from + errordocument est une technique beaucoup plus simple à laquelle je n'avais pas pensé. ET le faire en php n'est pas une si sotte idée que ça, tu peux avoir toute la flexibilité des bases, fichiers, etc. pour savoir qui ou quoi bloquer.

Mais j'avais bien compris ton problème, il me semble: tu veux interdire l'accès à ton site à certaines IP, mais tu veux que ces IP bloquées aient malgré tout accès à certaines pages non ?
Dans ce cas je te propose d'ajouter la condition négative que j'ai déjà postée. Le but est de rediriger l'utilisateur bloqué vers une page autorisée, sauf s'il se trouve déjà sur une page autorisée.