URL rewrite simple

Eléphanteau du PHP | 10 Messages

10 févr. 2012, 23:41

Bonsoir!
Je ne sais pas comment configurer mon fichier .htaccess.

J'aimerai que si un membre tape son pseudo
www.domaine.com/sylvain

Ca fasse:
www.domaine.com/modelbook.php?id=sylvain

Merci d"avance!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 févr. 2012, 10:58

Ta règle n'est pas si simple et dépend de la structure de ton site... en fait basiquement il suffit de définir un masque de recherche qui correspond aux chaines que tu recherches, qui capture la partie qui t'intéresse et ce par quoi tu veux le remplacer :

Code : Tout sélectionner

RewriteRule masque_de_recherche modelbook.php?id=$1
La difficulté vient dans la définition du masque_de_recherche qui doit transformer une url de type /sylvain mais qui ne doit pas modifier /modelbook... ni /un_dossier_de_ton_site

Donc en fonction de la structure de ton site, il faut définir un masque d'expression régulière qui exclura par exemple de la redirection les url qui contiennent un "/" ou qui contiennent un ".php", ou autre en fonction des urls qui ne doivent pas être réécrites :)

Il faut commencer par trouver la règle à appliquer et ensuite tu pourras l'écrire dans ton htaccess :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 10 Messages

12 févr. 2012, 03:59

Oulaaa! Je pensai pas que c'était aussi compliqué! Pourtant c'est vraiment que www.domaine.com/sylvain peut être interprété comme www.domaine.com/sylvain/index.php qui renvérait donc une page vide.
Pourtant c'est un classique des sites communautaire de proposer des espaces membre avec des URL courtes non? :|

Comment faire pour trouver une solution à ce problème ou qu'est ce qui pourrai remplacer ce système?

Eléphanteau du PHP | 46 Messages

12 févr. 2012, 05:25

Comme dit Ryle, tout dépend de la structure de ton code, n'hésite pas à le partager, les modo de ce forum sont la pour t'aider, pas pour te le piquer, pour ma part je dirais, pourquoi ne pas faire un if ?

Tu as le membre sylvain, utilise un espace membre si tu as, et renvoi vers une adresse

If adresse= http://www.domaine.com/$username

Se rediriger vers =

http://www.domaine.com/modelbook.php?id=$username

Ceux qui savent mieux que moi, n'hésitez pas à me corriger, je suis débutant.

Cordialement

Eléphant du PHP | 343 Messages

12 févr. 2012, 06:17

Je verrai plutôt à un "/membres/sylvain" qui serait bien plus simple ;)
Ou alors passer des éléments "-" ou autres que tu n'utilises pas sur d'autres dossiers pour les identifier.
Développeur web

Eléphanteau du PHP | 10 Messages

12 févr. 2012, 19:12

@atome13 Je ne comprend pas trop ce que tu propose car je pensais d'utiliser un fichier .htaccess, je ne pense pas qu'on puisse en PHP dire "If adresse= http://www.domaine.com/$username". Il n'y a rien pour vérifier l'adresse en temps réel à ma connaissance. Le fait de passer par un .htaccess (le premier fichier lu avant l'affichage du site) est à mon avis la seule solution.

Pour ce qui est de la stucture du site je ne sais pas trop quoi vous dire, c'est du genre classique:

images
js
include
index.php
modelbook.php
.htaccess
style.css
Page1.php
Page2.php
...

Je ne vois pas vraiment ce que ca peut vous apporter de savoir ca. Quand au code, c'est du PHP, jQuery, css...

@sam12 Je pense que je vais devoir utiliser ta solution mais un peu à contre-coeur car j'aurai vraiment voulu que les utilisateurs n'ai qu'à se souvenir du site (et leur pseudo biensur) comme la plupart des sites à membres.
Dans mon .htaccess en ce moment j'ai ca:

Code : Tout sélectionner

Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^([a-z]+)/?$ modelbook.php?id=$1 [L]
Quand je vais sur http://www.domaine.com/Sylvain , j'ai une page 404: "The requested URL /Sylvain was not found on this server." sans qu'aucune redirection ne se fasse.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2012, 20:52

Connaitre la structure de ton site permet de savoir par exemple que l'adresse http://www.domaine.com/images ne correspond pas au pseudo d'un utilisateur et ne doit pas être redirigée vers modelbook.php?id=images :)

Le problème que tu rencontres actuellement est lié au fait que les expression régulières sont sensibles à la casse et que si entre "a" et "z", on trouve bien le caractère "s", en revanche on y trouve pas le caractère "S". Il faut donc soit autoriser les deux a-zA-Z, soit rendre l'expression insensible à la casse nocase/NC :)


Après quelques recherches, tu dois également pouvoir utiliser les conditions suivantes pour vérifier si la page demandée existe ou non (et donc considérer uniquement comme des pseudos les urls qui ne correspondent à rien sur ton site :))

Code : Tout sélectionner

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-z]+)/?$ modelbook.php?id=$1 [NC,L]
A tester :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 10 Messages

15 févr. 2012, 14:54

Merci pour ta réponse mais que veux dire ca?

Code : Tout sélectionner

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 févr. 2012, 16:30

Il en faut peu pour être heureux ......