Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/04/2011, 09h44   #1
Invité régulier
 
Inscription : mai 2009
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 21
Points : 7
Points : 7
Par défaut [URL rewriting] N'importe quelle URl redirigée vers un site local

Bonjour,

J'essaie de monter une architecture qui imite le comportement d'un portail captif sans l'authentification. Je vous explique:

dans un environnement public, je souhaite mettre en place un Wireless LAN sans accès à internet. Quand des clients de type smartphone se connectent au Wifi, ils sont automatiquement redirigés vers la page d'accueil du site web local (hébergé sur un serveur du LAN), quelque soit l'adresse saisie dans son navigateur.

Pour cela, dans la première étape, j'ai mis en place sur mon serveur DNS du spoofing DNS pour qu'il réponde à n'importe quelle requête DNS l'IP de mon serveur local (192.168.1.254).

La deuxième étape, et c'est là ou je sèche, c'est d'écrire la RewriteRule. Et je n'arrive pas à saisir le fonctionnement.

Pour l'instant, j'ai mis dans mon fichier /etc/apache2/apache2.conf la règle suivante:

Code :
RewriteRule ^(.*)$ ^/index.html$
Dans mon esprit, cette règle remplace n'importe quel chaîne dans l'URL par une chaîne vide. Mais elle ne semble pas fonctionner.

Je précise 2 choses:

- Quand on tape un nom de domaine de type "www.developpez.net", ça fonctionne puisque le spoofing DNS est OK. C'est si on rajoute "/quelquechose" que ça ne fonctionne pas.

-Un phpinfo(); me précise bien que le mod_rewrite est activé.

Cordialement,
Etienne

EDIT:

voilà toute la partie du apache2.conf sur le Rewriting:

Code :
1
2
3
4
5
6
7
Options +FollowSymlinks
<IfModule mod_rewrite.c>
RewriteEngine On
</IfModule>

RewriteRule ^(.*)$ ^/index.html$ [L]
titoukivol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h39   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 280
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 280
Points : 8 568
Points : 8 568
Citation:
Envoyé par titoukivol Voir le message
Dans mon esprit, cette règle remplace n'importe quel chaîne dans l'URL par une chaîne vide.
Pas du tout : telle qu'elle est, étant donné qu'elle ne fait aucune redirection du navigateur (le flag R n'est pas présent), l'URL saisie par l'utilisateur reste telle quelle. Si tu veux que la barre d'adresse du navigateur change, il faut ajouter un R entre crochets :
Code :
RewriteRule ^(.*)$ ^/index.html$ [R]
Après, absolument tout sera redirigé sur /index.html, y compris les appels à des images et des "sous-pages" du style /quelquechose/. J'imagine que ce n'est pas exactement ce que tu veux faire : tu peux donner des détails ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h59   #3
Invité régulier
 
Inscription : mai 2009
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 21
Points : 7
Points : 7
Merci pour la réactivité !

Effectivement, ce n'est pas exactement ça.

Je souhaite que si un utilisateur tape dans sa barre d'adresse "www.developpez.net/forum/exemple/meuh" ou n'importe quelle adresse, il soit redirigé vers ma page d'accueil.

Par contre, une fois qu'il navigue dans mon site, cliquer sur un lien interne ne doit pas le rediriger vers la page d'accueil mais vers la page ciblée.
Pour ça, je pense qu'un RewriteCond doit marcher ?

Le but est d'obliger le navigateur de l'utilisateur à afficher ma page d'accueil, un peu comme les hotspots dans les aéroports mais sans la partie authentification, pas adaptée à mon besoin. D'où le spoofing DNS et le URL rewrite (en admettant que c'est bien du Rewrite qui est nécessaire...)

Et pour le moment, si l'adresse est simple ("www.google.fr/", sans rien après le "/", ça fonctionne, mais pas si il y a quelque chose après le "/")

Est-ce suffisamment précis ?
titoukivol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 11h37   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 280
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 280
Points : 8 568
Points : 8 568
Le plus simple c'est que tu aies un nom d'hôte pour ton site (www.monsiteamoi.com) et que tout appel à un site qui n'est pas celui-là soit redirigé dessus. Est-ce possible ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 13h09   #5
Invité régulier
 
Inscription : mai 2009
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 21
Points : 7
Points : 7
Pour le nom de domaine, ce n'est pas possible puisque le serveur est uniquement en Local est que le serveur DNS n'est pas implémenté.

Par contre, j'ai réussi à corriger le problème des URL complexes en utilisant un fichier .htaccess à la racine plutôt que le fichier de configuration du serveur apache.

contenu du .htaccess:
Code :
1
2
RewriteEngine On
RewriteRule ^.*$ index.html
Si on tape www.google.fr ou www.google.fr/result=id:exemple ou quoi que soit d'autre, ça marche: la redirection vers la page index.html s'effectue.

Maintenant, le problème est que tout est redirigé, mêmes les liens internes.

Je pense donc qu'il faut rajouter une RewriteCond pour empêcher cela.
J'ai tenté:
Code :
RewriteCond %{HTTP_HOST} !^http://192.168.1.254(.*)$
Mais elle ne semble pas fonctionner..

EDIT: j'ai changé la condition et c'est un peu mieux :
Code :
RewriteCond %{HTTP_REFERER} !^http://192.168.1.254/.*$
Avec cette condition, si on accède au site avec l'adresse 192.168.1.254/index.html, alors les liens fonctionnent à nouveaux, on est plus redirigé vers la page d'accueil.
Le problème c'est que si un client a saisi par exemple www.google.fr, il est redirigé vers la page index.html de mon serveur web local, mais il semble que le HTTP_REFERER soit encore http://www.google.fr. Peut-on modifier cela, par de la réécriture d'URL ou autre ?
titoukivol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h37   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 280
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 280
Points : 8 568
Points : 8 568
Utiliser l'IP ou un nom d'hôte spécifique, c'est la même chose. Vu que tu as configuré le DNS pour rediriger tous les noms vers ton IP, ça ne devrait pas poser le problème.

En fait, ce que tu essaies de faire avec les conditions, c'est ce que je veux faire avec un nom. La chose fonctionnerait ainsi :
Dans un .htaccess, ça ce passe tout simplement comme ça :
Code :
1
2
3
4
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.tonsiteatoi\.com$
RewriteRule ^.*$ http://www.tonsiteatoi.com/ [R=302,L]
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h03.


 
 
 
 
Partenaires

Hébergement Web