Aller au contenu

Redirection conditionnelle dans .htaccess


Sujets conseillés

Bonjour,

Je cherche à coder ceci dans le .htaccess

si (ip = 111.111.xxx.xxx) ou (ip = 222.222.xxx.xxx)
redirection temporaire (302) de page1.php vers www.site2.com/page2.php
sinon
redirection permanente (301) de page1.php vers www.site2.com/page2.php

xxx indique qu'il s'agit d'un range d'ip

Merci d'avance ;)

Lien vers le commentaire
Partager sur d’autres sites

RewriteEngine on
RewriteCond %{REMOTE_ADDR}
RewriteRule ^/page1.php$ http://www.site2.com/page2.php [R=301,L]
RewriteCond %{REMOTE_ADDR}
RewriteRule ^/page1.php http://www.site2.com/page2.php [R=302,L]

La seule partie dont je suis pas complètement sur et qui dépend de ton hébergeur est celle correspondant au : ^/page1.php$

Cela peut aussi devoir s'écrire selon ta config :

/page1.php

page1.php

^(.*)page1.php$

Essaye de tester en attendant le roi de l'url rewriting, j'ai nommé Dan !, qui devrait corriger mon code :P

(ceci dit, ce type de code peut aussi être réalisé en php ;):P)

Lien vers le commentaire
Partager sur d’autres sites

Ok, merci :)

Pour tester mes 2 ranges d'IP j'ai un doute. Ce code est-il le bon pour la partie "302"?

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^111\.111\.* [OR]
RewriteCond %{REMOTE_ADDR} ^222\.222\.*
RewriteRule ^/page1.php$ http://www.site2.com/page2.php [R=302,L]

Ensuite pour faire la 301 si ce n'est pas un de ces 2 ranges d'IP, peut-on écrire une condition "else" dans .htaccess? Sinon comment le coder pour que la 301 ne se fasse que si l'ip n'appartient pas à mes 2 ranges d'ips?

Lien vers le commentaire
Partager sur d’autres sites

Salut Jan,

Je ne pense pas que le caractère * soit accepté dans l'écriture de la condition.

Essaies avec :

RewriteEngine on

RewriteCond %{REMOTE_ADDR} ^111\.111\.[0-9]+\.[0-9]+ [OR]
RewriteCond %{REMOTE_ADDR} ^222\.222\.[0-9]+\.[0-9]+
RewriteRule ^/page1.php$ http://www.site2.com/page2.php [R,L]

RewriteRule ^/page1.php$ http://www.site2.com/page2.php [R=301,L]

La première Règle sera exécutée si l'une des conditions est remplie, et le flag L forcera l'arrêt des rêgles. Le R=302 n'est pas nécessaire, vu que R envoie une entête 302 par défaut.

La seconde règle ne sera interprétée que si la première ne l'est pas.. et tu auras donc une entête 301.

Dan

Lien vers le commentaire
Partager sur d’autres sites

Je viens de tester ta solution Dan, ça marche parfaitement à condition que j'enlève le / devant page1.php. Sans doute une config tordue de mon serveur. Merci :)

Pour information serait il possible de faire cette redirection conditionnelle en utilisant un RedirectPermanent et un RedirectTemp?

Lien vers le commentaire
Partager sur d’autres sites

Salut Jan,

le / à mettre ou non devant page.php dépend surtout de l'endroit où se trouve le fichier .htaccess. Il faut l'enlever si ce fichier n'est pas à la racine.

L'utilisation de RedirectPermanent et Redirect (ou RedirectTemp) ne pourra pas se faire dans le cas d'utilisation de RewriteCond. Mais les R=301 étant totalement équivalents sur le plan des entêtes, le RedirectPermanent n'apporte rien de plus.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...