Redirection dans htaccess avec accès restreint

toto2525

WRInaute occasionnel
Bonjour,

Peut-on rediriger un visiteur vers un autre site web (une autre url) avec un htaccess avec « AuthName "Acces Restreint" » ?

J'ai un site web qui me sert de test, je voudrais mettre en place un htaccess qui me permettrait d'entrer sur ce site avec un login et un mot de passe afin que je puisse être le seul à accéder à mon site, les autres qui taperaient un mauvais login ou mot de passe seront redirigés vers mon autre site web (donc url différente de celle ou il y a le htaccess), comment faire cela, voici mon htaccess :
AuthUserFile /home/mon-site/www/repertoire/.htpasswd
AuthName "Acces Restreint"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
ErrorDocument 401 http://www.mon-site-2.com/
ErrorDocument 403 http://www.mon-site-2.com/
ErrorDocument 404 http://www.mon-site-2.com/

La redirection vers « mon-site-2.com » ne marche pas avec ce htaccess, on reste sur la vilaine page "error 401" si l'on entre un mauvais login ou mot de passe !

Merci pour votre aide.
 

jcaron

WRInaute accro
toto2525 a dit:
Peut-on rediriger un visiteur vers un autre site web (une autre url) avec un htaccess avec « AuthName "Acces Restreint" » ?

J'ai un site web qui me sert de test, je voudrais mettre en place un htaccess qui me permettrait d'entrer sur ce site avec un login et un mot de passe afin que je puisse être le seul à accéder à mon site, les autres qui taperaient un mauvais login ou mot de passe seront redirigés vers mon autre site web (donc url différente de celle ou il y a le htaccess), comment faire cela, voici mon htaccess :
AuthUserFile /home/mon-site/www/repertoire/.htpasswd
AuthName "Acces Restreint"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
ErrorDocument 401 http://www.mon-site-2.com/
ErrorDocument 403 http://www.mon-site-2.com/
ErrorDocument 404 http://www.mon-site-2.com/

La redirection vers « mon-site-2.com » ne marche pas avec ce htaccess, on reste sur la vilaine page "error 401" si l'on entre un mauvais login ou mot de passe !

A priori je dirais qu'une "vraie" redirection (i.e. un 301/302 avec un Location: et tout ça) ce n'est pas possible, tout simplement parce que le protocole HTTP ne le permet pas: pour que ton browser te demande ton login/passe, le serveur http envoie un 401 (qui n'est pas affiché, mais provoque l'affichage de la boîte de dialogue). Pareil si tu fais une erreur pour redemander le login/passe.

La page n'est affichée que si finalement tu annules l'authentification dans ton navigateur (et encore, pas dans tous les browsers, de mémoire Safari n'affiche rien et te laisse à la page précédente).

Ce que tu peux faire c'est dans ce cas-là mettre un "faux" redirect au niveau HTML, i.e. soit un meta Refresh, soit un bout de JS pour changer le document.location. Il te faut pour ça utiliser un ErrorDocument "local" à ton site (d'ailleurs la doc d'Apache est claire sur ce sujet, tu ne peux pas utiliser une URL complète pour un ErrorDocument 401).

Jacques.
 

toto2525

WRInaute occasionnel
Merci pour ta réponse jcaron.

Peux-tu développer un peu plus ton idée de "faux" redirect au niveau HTML ?

Comment faire pour que les internautes n'accèdent à mon site que s'ils ont entré un bon login/mot de passe ?

D'avance merci.
 

jcaron

WRInaute accro
toto2525 a dit:
Peux-tu développer un peu plus ton idée de "faux" redirect au niveau HTML ?

Euh... Les classiques
Code:
<META HTTP-EQUIV="Refresh" CONTENT="0;url=http://url.de.destination/">
(urg) ou
Code:
<SCRIPT TYPE="text/javascript">
<!--
document.location.href='http://url.de.destination/'
-->
</SCRIPT>
On peut probablement trouver d'autres méthodes...

toto2525 a dit:
Comment faire pour que les internautes n'accèdent à mon site que s'ils ont entré un bon login/mot de passe ?

Pour ça le .htaccess indiqué (moins le Limit qui ne sert à rien, au contraire) suffit... Le problème c'est ce de les envoyer "ailleurs" s'ils ne sont pas authentifiés.

Jacques.
 

toto2525

WRInaute occasionnel
Merci jcaron pour ta réponse.

Le problème avec le HTTP-EQUIV="Refresh" ou le "document.location.href='http://url.de.destination/'" c'est que même moi je vais être rédirigé, ce n'est pas ce que je veux faire !

Tu as souligné la difficulté de ce que je souhaite faire :

Code:
Le problème c'est ce de les envoyer "ailleurs" s'ils ne sont pas authentifiés.

Comment faire cela avec un htaccess "AuthName "Acces Restreint" ?
 

jcaron

WRInaute accro
toto2525 a dit:
Le problème avec le HTTP-EQUIV="Refresh" ou le "document.location.href='http://url.de.destination/'" c'est que même moi je vais être rédirigé, ce n'est pas ce que je veux faire !

Euh, non. Tu mets ça sur la page que tu sers avec le ErrorDocument 401. Normalement cette page n'est visible / interprétée par le navigateur que si tu as annulé l'authentification, donc si n'est pas correctement authentifié. Mais ça ne marche pas avec Safari...

La seule autre solution c'est de passer par une authentification par formulaire & cookie, mais ça veut dire que ça doit être géré par des scripts et pas par Apache directement dans les .htaccess... L'avantage c'est que c'est beaucoup plus souple, tu fais ce que tu veux :)

Jacques.
 

toto2525

WRInaute occasionnel
Merci Jacques.

J'ai essayé ta solution avec htaccess avec accès restreint + HTTP-EQUIV="Refresh" dans la page du ErrorDocument 401 mais ça ne marche pas, on reste sur la vilaine page erreur 401 :cry:

Je crois que je vais mettre en place une solution avec des scripts par contre c'est un peu lourd à faire car il faut mettre en place un script qui gère l'accès dans chacun des répertoires de mon site, j'en ai une bonne dizaine ! L'avantage de l'htaccess c'est qu'une fois mis en place à la racine du site il s'occupait de filtrer l'accès sur tout le site.

Je ne vois pas trop comment faire cette accès restreint par le biais de script : une popup javascript qui s'affiche avant l'ouverture de la homepage invitant à entrer un login/mot de passe, ou bien un formulaire html sur la première page avec gestion par cookies ou session php qui filtre les entrées, etc...
 

Discussions similaires

Haut