Aller au contenu

Sujets conseillés

Posté

Bonjour à tous,

Je suis nouveau par ici, mais j'ai lu les articles de Dan sur les fichiers .htacess et la ré-écriture des URL. Mon but est de permettre aux utilisateurs d'utiliser des liens simplifiés pour accéder à leur page publique, pour ensuite facilement les référencer sur leur blogue ou dieu-sais-ou sur le net.

Je suis arrivé à pondre ceci :

adresse url de départ : "http://domaine.com/USERNAME/"

Moulinette :

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^(.+[^/])/$ profile.php?m=$1 [L]

adresse résultante : "http://domaine.com/profile.php?m=USERNAME"

Ça fonctionne de façon impeccable. Sauf que la mon client veux cette url à la place :

"http://domaine.com/USERNAME"

sans "/" a la fin! je veux bien, mais la j'ai tout essayé les méthodes que je connais en vain!

Pour vous aider, je suis hébergé chez Iweb Technologies en serveurs mutualisés. Évidement, rien sur leur site ne laisse présager une solution ha ha ha! Vive les services aux clients :unsure:

Posté

Tout dépend des autres formes d'urls que tu peux avoir (il ne faut pas d'interférence), mais on peut très bien envisager quelque chose comme ça :

RewriteRule	^([a-z0-9]+)$	profile.php?m=$1	[L]

Il faudra sans doute adapter l'expression régulière si tu autorises des tirets, underscores ou autres dans les noms d'utilisateur.

Posté (modifié)

Merci de ta réponse Captain_torche!

j'ai testé cette expression et y ai incorporé le tiret, le souligné et l'underscore :

#RewriteRule ^([a-z0-9-_\.]+)$   profile.php?m=$1        [L]

mais là, tout comme mes essais précédents mon post, toutes les pages de mon site convergent vers profile.php et le paramètre $1 ne parviens pas a la page elle-même.

Mon site est constitué de grosso-modo 4 dossiers

/img/

/css/

/modules/

/language/

et mes pages sont en PHP, toutes sauf 404.shtml...

Tu me parlais de créer des règles qui éviterons l'interférence entre toutes mes pages et profile.php? Là il faudrait m'expliquer un peut :unsure:

Merci encore de ton aide :)

Jean-Sébastien

Modifié par captain_torche
Inutile de citer le message précédent; on vient de le lire
Posté

Réessaye avec le tiret à la toute fin de l'expression, pour voir ? (Au milieu il est interprété comme un intervalle)

RewriteRule ^([a-z0-9_-]+)$   profile.php?m=$1        [L]

Tu parles de souligné et d'underscore ... ce sont le même caractère (_).

Par contre, tu incorpores un point : les pseudos peuvent en contenir un ?

Quant aux interférences, si jamais tu as une page qui s'appelle toto (sans extension), elle sera réécrite en profile.php?m=toto, même s'il ne s'agit pas d'un nom de membre.

Posté (modifié)

Oups, je ne m'était pas relu, désolé pour l'histoire de caractères haha!

En effet ça fonctionne de façon impeccable! Mais j'ai besoin du point dans le nom d'utilisateur. Je viens de contacter mon client et c'est vraiment important, selon-lui, c'est possible sur facebook et myspace ?

j'imagine qu'il y a quelque chose qui m'échappe, peut être faire une règle qui fait exception aux noms terminant par *.php, *.html, *.shtml

Bizzare!

Jean-Sébastien

Modifié par danomen2009
Posté

Tu pourrais donner un exemple de chaque "genre" de page que tu as sur ton site ?

Sinon, en ajoutant le point, ça donne ça :

RewriteRule ^([a-z0-9_\.-]+)$   profile.php?m=$1        [L]

Posté (modifié)

En effet, j'aurais du donner plus de détails sur les noms de pages en question! :blush:

j'ai des pages comme :

profile.php

activation.php

home.php

index.php

invite.php

suscribe.php

vote.php

404.shtml (obligé d'être en shtml a cause de l'hébergeur :()

et j'en passe!

En effet, le code que tu m'as donné avec le point fonctionne, mais toutes les pages du répertoire de base sont redirigées vers "profile.php?m="

Merci encore de ton aide précieuse! Je me sens un peut bête ! :rolleyes:

Jean-Sébastien

Modifié par danomen2009
Posté

Oui, effectivement, avec le point, on capture toutes ces pages ;)

Il faut faire une première réécriture pour ces pages, qui ne fait rien, mais indique malgré tout qu'on n'applique plus de règles pour elles.

RewriteRule	^.*\.(php|s?html){:content:}nbsp;   -	[L]

Si à la racine de ton site, tu n'as que des fichiers shtml et php, ça devrait fonctionner : le tiret dans la réécriture indique de ne rien faire, et le flag [L] indique qu'on n'exécute plus aucune autre règle après celle-ci. Quant aux images, javascripts et CSS, comme ils sont dans des sous-répertoires, ils ne devraient pas être impactés.

Bien entendu, tu dois placer cette ligne AVANT l'autre dans ton fichier ;)

Posté (modifié)

Vive le htaccess, des heures de plaisir !

Pour une raison que j'ignore, ça ne fonctionne toujours pas, même si logiquement ça fait du sens?

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^.*\.(php|s?html){:content:}nbsp; - [L]
RewriteRule ^([a-z0-9_\.-]+)$ profile.php?m=$1 [L]

Modifié par danomen2009
Posté

Ouais, je me demandais aussi, mai j'hésitais a l'essayer dans le {:content:}   :blush:

De toute façon ça fonctionne de façon impeccable :)

Je te remercies "ohh Captain!" :smartass: j'en apprends tout les jours :)

Jean-Seb

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...