8800 sujets

Développement web côté serveur, CMS

Bonjour,

J'espère être dans la bonne catégorie pour vous faire part de mon problème de redirection d'URL...

J'aimerais proposer aux membres de mon site une adresse de type site.com/pseudodumembre pour leur fournir un lien facile à partager.
Le problème est que par la structure existante de mon site, la tâche est compliquée !

Pour faire simple :
- mes pages du site sont à la racine www (dont la page de profil) et vont chercher leurs éléments dans différents dossiers : css, includes, js, ...
- les adresses URL d'accès aux profils sont actuellement sous la forme site.com/membre/pseudodumembre. J'ai donc un dossier membre/ qui contient un seul fichier index, lequel va chercher si un enregistrement correspondant à l'URI se trouve en BDD

Quelqu'un aurait-il une idée, une petite astuce, pour obtenir ce que je veux et m'éviter d'avoir à restructurer l'arborescence de mon site ?
En fait, j'utilise déjà la règle suivante
RewriteRule ^membre/(.*)$  membre/index.php  [L]

Et la page index de ce répertoire membre analyse l'URI pour rediriger vers le bon profil.

Ta proposition est donc semblable sauf qu'elle redirige vers mon fichier index situé à la racine (qui est en fait la page d'accueil de mon site), et qu'elle ne m'affranchit pas du membre/ à la base.

J'ai besoin d'une règle type
RewriteRule ^(.*)$  index.php  [L]

et que cette page index à la racine analyse l'URI et redirige vers le bon profil s'il existe ou recherche si une autre page correspondante existe.
Sauf qu'étant donné la structure de mon site, avec tous mes fichiers à la racine et une page d'index qui me sert de page d'accueil, je ne vois pas comment faire...
Modifié par xtense (09 May 2011 - 11:11)
xtense a écrit :
Ta proposition est donc semblable sauf qu'elle redirige vers mon fichier index situé à la racine
En fait c'est juste que j'ai répondu un peu vite : j'aurais plutôt redirigé comme toi vers membre/index.php

Pour ce qui est de ton "problème" je ne le comprends pas très bien : s'il s'agit simplement de pointer vers les bons fichiers il suffit d'utiliser BASE... mais j'ai peut-être (sûrement) loupé quelque chose. Smiley murf
Le problème c'est que j'ai déjà des fichiers qui sont à la racine de mon site, qu'il y a déjà des règles de réécriture qui s'appliquent sur eux, et que je suis susceptible d'en ajouter (des fichiers) un peu n'importe quand selon les évolutions.

Donc par exemple, actuellement à la racine de mon site j'ai entre autres :
- index.php, avec la réécriture RewriteRule ^welcome$ index.php [L]
- profil.php, avec un RewriteRule ^profil.([0-9]+)$ profil?mid=$1
- projet.php, avec un RewriteRule ^projet-(.*)-([0-9]+)\.html$ projet?pid=$2 [L]
- etc...

Dans ce contexte là, je veux avoir ma règle qui me permette d'avoir monsite.com/pseudo.
Sauf qu'entre les réécritures existantes et les pseudos que vont choisir mes membres, le serveur risque de se perdre complètement en ne sachant plus s'il s'agit d'une page ou d'une redirection vers un profil.

Imaginons pour l'exemple qu'un de mes membres s'appelle "welcome".
Idéalement j'aimerais donc qu'il ait une adresse type monsite.com/welcome, sauf que pas de bol, c'est justement le lien vers la page d'accueil de mon site...
Autre exemple, le membre s'appelle "proje". Il aurait donc une adresse type monsite.com/proje, sauf que là encore, j'ai déjà une règle de réécriture qui analyse ça comme le début d'une autre page projet.php...

Je pourrais interdire que mes membres puissent prendre un pseudo qui correspondrait à une de mes pages, mais je n'aime pas trop le principe (à part si c'est pour 3-4 pages bien sûr) et surtout je ne veux pas prendre le risque de créer une page un jour qui ait le même nom qu'un pseudo choisi précédemment par un membre (ce qui me replongerait dans le schéma du paragraphe précédent).

Je ne sais pas si je suis vraiment beaucoup plus clair... Smiley biggol
Modifié par xtense (09 May 2011 - 11:49)
xtense a écrit :
Je ne sais pas si je suis vraiment beaucoup plus clair...
Si : cette fois j'ai compris. Smiley cligne

Personnellement je reverrais complètement la structure de ton site (pendant qu'il est encore temps Smiley lol ) puisque de tout vouloir mettre à la racine va t'obliger à "résoudre" des problèmes qui ne devraient même pas exister ! C'est sûrement un gros boulot de recréer des répertoires et de changer les liens et les redirections mais comme on peut supposer que ton site va continuer à s'étoffer ça me semble être la seule chose à faire.
Bon... évidemment j'aurais préféré lire autre chose mais on y revient toujours, je crois que je ne vais pas pouvoir couper à la restructuration du site !

Le truc c'est que je ne sais pas trop comment m'y prendre concrètement...
J'ai bien pensé à mettre tout mon site dans un répertoire fr/ et n'avoir qu'un fichier index.php à la racine qui se charge de détecter s'il s'agit d'un nom de membre ou pas, mais plusieurs questions me viennent à l'esprit :
- dans le fichier index en lui-même comment lui dire que s'il ne trouve pas de nom de membre correspondant à l'URI, il doit alors aller voir dans le répertoire fr s'il y a une réécriture qui correspond ou un nom de fichier... ça me paraît bien compliqué d'entrée de jeu...
- comment ça se passe pour les adresses déjà référencées ...
- (et pas mal d'autres questions bien flippantes...)
Eh bien tu pourrais déjà structurer ton site en séparant les membres du reste du site :
un dossier site contenant tes scripts et css , et un dossier membre pour tes membres.
Oui pourquoi pas, mais en fait ce que je ne comprends pas je crois, c'est la manière de coder ça...

J'aurais donc un fichier index à ma racine comme le pseudocode suivant :


mavariable = récupération de l'URI
Si (mavariable == pseudo en BDD)
  redirection vers le profil
Sinon
  ???
  redirection vers la bonne page du site


Eh oui, "Sinon" quoi ?
Comment lui dire que si ce n'est pas un pseudo, il doit faire le lien avec le fichier .htaccess du répertoire qui contient mon site pour voir si ça correspond à une page ?

Voilà ce qui m'échappe... ça ne doit pas être bien sorcier mais il y a une logique intellectuelle qui se fait pas dans ma tête là !

A moins que mon index de la racine ne se charge juste de rediriger vers un pseudo s'il existe et que sinon il se contente de balancer sur la page d'accueil... ? Smiley confus
grâce à toi (et la doc d'apache ) je viens de comprendre le htaccess proposé par mon cms pour les URL simples

Voici donc les lignes salvatrices :
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


la première ligne indique que la prochaine règle de réécriture ne s'appliquera que si le fichier demandé n'est pas un fichier existant
la deuxième ligne indique que la prochaine règle de réécriture ne s'appliquera que si le fichier demandé n'est pas un répertoire existant
La troisième envoie donc les requêtes concernant des fichiers/répertoires inconnus au script index.php

Par contre mon cms est trop compliqué pour aller plus loin ...
Effectivement c'est intéressant !
Mais un peu risqué dans mon cas : si par hasard un membre choisi un nom d'utilisateur et que par la suite je crée une page qui s'appelle pareil, ça va buguer...

En tout cas, je pense qu'en déplaçant l'ensemble de mon site vers un nouveau répertoire, et en recablant les liens, je vais pouvoir m'en sortir... c'est ce que je vais tenter de faire en tout cas.

Merci beaucoup !