IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

[URL Rewriting] Répertoires virtuels


Sujet :

Apache

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 44
    Points
    44
    Par défaut [URL Rewriting] Répertoires virtuels
    Bonjour!

    Développeur PHP, j'aimerais faire en sorte que lorque l'on va sur
    http://site.com/toto
    ou
    http://www.site.com/toto

    que ce soit la page
    http://site.com/page.php?id=toto
    qui soit servie

    En gros, comme si "toto" était un répertoire du site, alors qu'il est en réalité une variable passée en GET au script "page.php" (qui n'apparaît nulle part dans l'url initiale).

    Mes questions sont:

    - est-ce possible?

    - si oui, est-ce possible de tester qu'il n'existe pas de "vrai" répertoire "toto" avant de "rediriger" sur "page.php?id=toto"

    - dernière question, de vrai néophyte, puisque la re-écriture d'url se fait sur le serveur, en testant depuis n'importe quel poste client je m'assure que ça fonctionne sur tous les clients, n'est-ce pas?

    Merci pour votre aide...

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par gb-ch
    est-ce possible?
    Oui.

    Citation Envoyé par gb-ch
    si oui, est-ce possible de tester qu'il n'existe pas de "vrai" répertoire "toto" avant de "rediriger" sur "page.php?id=toto"
    Oui à l'aide d'une directive RewriteCond et de l'"option" -d :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine on
     
    RewriteCond %{REQUEST_URI} !page.php
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
    RewriteRule ^([^/]+)/?$ page.php?id=$1 [L]
    A adapter si besoin.

    Citation Envoyé par gb-ch
    dernière question, de vrai néophyte, puisque la re-écriture d'url se fait sur le serveur, en testant depuis n'importe quel poste client je m'assure que ça fonctionne sur tous les clients, n'est-ce pas?
    Oui puisque comme vous le soulignez c'est le serveur qui s'occupe de cela (à moins de tester le client ...).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par julp Voir le message
    Oui à l'aide d'une directive RewriteCond et de l'"option" -d :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !page.php
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
    RewriteRule ^([^/]+)/?$ page.php?id=$1 [L]
    A adapter si besoin.
    Merci beaucou julp, je vais essayer d'y comprendre quelque chose et tester cela de ce pas...

    Au fait, où puis-je trouver une référence de base qui m'expliquera la syntaxe afin que je puisse adapter ceci par moi-même?

    Encore merci!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    ReMoi! ;o)

    J'ai testé le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !page.php
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
    RewriteRule ^([^/]+)/?$ page.php?id=$1 [L]
    que j'ai placé dans un .htaccess à la racine de mon site web

    Ca donctionne bien dans le sens que si je vais sur
    http://monsite.com/toto
    ça me renvoit bien sur
    http://monsite.com/page?id=toto

    Mais le problème est que si je vais sur
    http://monsite.com
    ça me renvoit sur
    http://monsite.com/page?id=index.php
    donc les "vraies" pages ne sont plus accessibles...

    L'idée souhaitée est que je puisse accéder à toutes mes "vraies" pages et "vrais" répertoires qui existent vraiment mais que si l'on t'ente d'accéder à un répertoire genre
    http://monsite.com/toto
    mais que le répertoire en question n'existe pas réellement (et seulement dans ce cas) alors on est redirigé sur
    http://monsite.com/page?id=toto

    Mais que dans tous les autres cas (lorsque la page ou le répertoire demandés) existent vraiment, alors pas de redirection.

    J'en demande peut-être trop à mod_rewrite? ;o)

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    J'ai bien précisé à adapter

    Pour garder l'idée, ceci semble fonctionner un peu mieux que ce que j'avais donné (réécriture de ce qui ressemble à des répertoires de premier niveau uniquement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine on
     
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
    RewriteRule ^([^/.]+)/?$ page.php?id=$1 [L]
    Il y a éventuellement plus simple et performant en personnalisant la page d'erreur 404 (à l'aide de la directive ErrorDocument). Tout dépend ce que vous cherchez précisément à réaliser.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Merci bien!

    Ca fonctionne très bien!

    Je constate juste comme un affichage d'une page blanche pendant un délai très cours à chaque changement de page. Si je supprime le .htaccess, l'effet disparaît également. Une idée de la cause?

    Pouvez-vous svp me donner un tuyaux de doc / référence qui m'aidera à aller de l'avant de façon plus autonome?

    En fait, je veux offrir un service où chaque membre aurait sa propre page perso. La page sera générée par un script (http://site.com/page.php, dans mon exemple) qui attend en paramètre (id=) le pseudo du membre.

    Puisque ce n'est pas très élégant que les membres aient une URL du type http://site.com/page.php?id=pseudo je souhaite qu'ils puissent accéder à leur page via http://site.com/pseudo sans avoir à créer un vrai répertoire pour chaque membre.

    Est-ce plus clair?

Discussions similaires

  1. [URL rewriting] Répertoire virtuel
    Par franckblack dans le forum Apache
    Réponses: 6
    Dernier message: 03/02/2011, 14h31
  2. Réponses: 5
    Dernier message: 12/04/2009, 22h28
  3. [URL rewriting] Répertoire virtuel et lien
    Par Marlow dans le forum Apache
    Réponses: 2
    Dernier message: 21/02/2009, 17h55
  4. [URL Rewriting] répertoires virtuels
    Par kevinf dans le forum Apache
    Réponses: 6
    Dernier message: 13/10/2007, 22h54
  5. URL Rewriting - répertoire virtuel
    Par Samyhijodelaluna dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2007, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo