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 23/01/2011, 16h51   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 1
Points : 0
Points : 0
Par défaut [URL rewriting] Masquer un répertoire dans l'URL

Bonjour à tous,

Voilà où j'en suis.
Les règles à appliquer sont les suivantes :
1- j'ai un répertoire 'content' dans lequel se trouvent tous les fichiers php de bases (qui peuvent s'appuyer sur d'autres php sauvegardés dans un répertoire 'noaccess' qui doit être protégé afin de ne pas être vu et visitable par les interanutes mal intentionnés) - Ex: www.monsite.com/content/
2- chacun de mes clients à son URL perso se situant en www.monsite.com/content/clients/clientXXX, www.monsite.com/content/clients/clientYYY, etc... Ils doivent pouvoir l'atteindre en tapant www.monsite.com/clientXXX, etc...

J'ai réussi à faire ces 2 étapes avec les 2 fichiers .htaccess suivants:
1- dans le fichier www.monsite.com/.htaccess
Code :
1
2
3
4
5
6
7
8
9
10
Options +FollowSymlinks
RewriteEngine on
RewriteOptions MaxRedirects=10
# checks for incoming URLs that have no string (ie. http://www.monsite.com/clientXXX/)
RewriteRule ^$ http://www.monsite.com/content/index.php [R=301,L]
# redirects any URL with any string to the 'content/clients/' directory and passes the string in as a variable
RewriteRule ^/?([-a-zA-Z0-9/_]+)$ http://www.monsite.com/content/clients/$1 [L]
ErrorDocument 401 http://www.monsite.com/content/error_401.php
ErrorDocument 403 http://www.monsite.com/content/error_403.php
ErrorDocument 404 http://www.monsite.com/content/error_404.php
2- dans le fichier www.monsite.com/content/.htaccess
Code :
1
2
Options +FollowSymlinks
RewriteEngine off
Alors première question car ça fonctionne mais est-ce "propre" ?
Ou est-ce améliorable ?

Et surtout voici ma deuxième question qui revient sur le sujet précédemment évoqué sur cette page du forum: je souhaiterais que le répertoire /content/ soit invisible dans l'URL donc :
- soit l'utilisateur voit www.monsite.com/index.php alors qu'il est réellement sur www.monsite.com/content/index.php
- soit il voit www.monsite.com/client.php?id=XXX alors qu'il est arrivé sur http://www.monsite.com/content/clien...tXXX/index.php en tapant www.monsite.com/clientXXX puis redirigé vers www.monsite.com/content/client.php?id=XXX visible en www.monsite.com/client.php?id=XXX

Voilà j'espère avoir été suffisament clair dans mes propos.
Mais malheureusement les quelques suggestions précédentes évoquées dans cette page ne change en rien le comportoment de mon site qui affiche toujours le répertoire /content/.

Merci d'avance pour toutes personnes ayant de vraies compétences en la matière (malheureusement pas mon cas)
xynobes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 00h17   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 278
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 278
Points : 8 565
Points : 8 565
C'est pas terriblement propre mais si ça marche, pourquoi pas. Après, je ne vois pas l'intérêt de faire ça si ce n'est finalement pas le besoin Donc vire ton .htaccess dans le répertoire /content.

Pour maquer /content/, je plus simple c'est d'écrire la règle comme on a envie de l'écrire : "si l'URL ne commence pas par /content, l'ajouter". Ca se traduit directement ainsi dans le .htaccess à la racine du site :
Code :
1
2
RewriteCond %{REQUEST_URI} !^/content
RewriteRule (.*) /content/$1 [L]
Après, pour reconstruire l'URL avec les paramètres, c'est idem, faut pas chercher bien compliqué. La règle est : "passer ce qui suit /content/clients/ en paramètre d'URL", ce qui donne :
Code :
RewriteRule ^content/clients/(.*)(/index\.php)?$ /content/client.php?client=$1 [L]
Enfin, on garde le premier RewriteRule qui fait bien son boulot mais on le modifie légèrement pour virer le /content qu'on ne veut plus.

Au final, ça donne ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Options +FollowSymlinks
RewriteEngine on
RewriteOptions MaxRedirects=10
# checks for incoming URLs that have no string (ie. http://www.monsite.com/clientXXX/)
RewriteRule ^$ http://www.monsite.com/index.php [R=301,L]

RewriteCond %{REQUEST_URI} !^/content
RewriteRule (.*) /content/$1 [L]

RewriteRule ^content/clients/(.*)(/index\.php)?$ /content/client.php?client=$1 [L]

ErrorDocument 401 http://www.monsite.com/content/error_401.php
ErrorDocument 403 http://www.monsite.com/content/error_403.php
ErrorDocument 404 http://www.monsite.com/content/error_404.php
__________________

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 04h23.


 
 
 
 
Partenaires

Hébergement Web