2009-07-18 8 views
0

Je vois les sites qui utilisent cette convention.Comment utiliser htaccess pour les URL générées dynamiquement

hxxp: //www.twitter.com/golem

hxxp: //www.twitter.com/golem/following

Je suis en train de le faire sur mon site. "golem" est dynamique et est fondamentalement le nom d'utilisateur.

Alors hxxp: //www.monsite.com/golem irait à la page de golem.

Et hxxp: //www.mysite.com/golem/details.php irait à la page de détails pour golem.

La question est:

  1. Comment puis-je faire htaccess il ajoute toujours & user_name = golem à tous mes fichiers php dans la chaîne de requête? Sans le montrer dans la barre d'adresse du navigateur. Donc, fondamentalement, il faut prendre le premier chemin de l'URL qui a slash et l'ajouter comme requête à la fin de la page PHP que je regarde. Comment faire pour que hxxp: //www.mysite.com/golem/details.php exécute réellement le fichier dans l'emplacement réel à hxxp: //www.monsite.com/details.php? User_name = golem (http://www.monsite.com/golem/details.php) pas de "golem" dans le chemin) Tandis que vous affichez toujours l'URL fausse dans la barre d'adresse.

  2. faire fonctionner pour d'autres urls comme hxxp: //www.mysite.com/golem/page.php et hxxp: //www.mysite.com/golem/view.php et etc etc

A regardé tutoriels etc, mais ne trouve pas de réponse. Appréciez toute aide!

+0

Regardez mod_rewrite. – derobert

Répondre

1

Activer mod_rewrite si ce n'est pas déjà fait. Dans votre fichier .htaccess, vous devez ajouter un peu de RewriteRule.

Essayez ceci:

RewriteRule ^([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

Si cela ne fonctionne pas, essayez celui-ci:

RewriteRule ^/([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

Mais il y a une contrepartie: si vous avez des URL classiques, ils seront pris par ces règles. Si vous pouvez distinguer les noms d'utilisateurs des noms de scripts, il existe une solution. Disons que les noms d'utilisateur ne peuvent pas contenir de point. Ensuite, vous devez remplacer la règle avec celui-ci:

RewriteRule ^([^/.]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

(Notez le point dans la première parenthèse - il est dit que si l'URL contient un point, il ne correspond pas à la règle).

Maintenant, chaque URL contenant un point avant les paramètres sera traitée comme une URL "normale".

Si les noms d'utilisateur CAN contiennent un point, nous sommes confrontés à un problème, car comment pouvez-vous dire que details.php est le nom d'un script php ou d'un nom d'utilisateur? Dans ces cas, il devient très difficile d'écrire RewriteRules qui correspondent seulement à ce que nous voulons. Et il est également très difficile de les tester, car il y a beaucoup de cas limites auxquels il est très difficile de penser.

+0

Merci beaucoup FWH.Cela semble fonctionner mais pour une raison WEIRD, je ne peux plus lire d'autres parties des paramètres d'URL. Je peux obtenir le nom d'utilisateur en utilisant $ _REQUEST ['nom_utilisateur'] mais si l'URL est similaire à hxxp: //www.mydomain.com/details.php? Item_id = 23, je ne peux pas supprimer item_id de l'URL pour une raison étrange. Quelqu'un sait pourquoi? –

+0

Cela est dû au fait que les règles ci-dessus capturent toutes les URL et traitent la première partie comme le nom d'utilisateur, même s'il s'agit de "details.php". Si vous pouvez distinguer les noms d'utilisateurs des noms de scripts (disons, par exemple, si les noms d'utilisateur ne peuvent pas contenir de point), vous devez remplacer les règles par quelque chose qui n'attrape que les URL sans les noms de script. Je mets à jour ma réponse pour refléter cela. – FWH

+0

Merci FWH. Mais cela ne semble toujours pas fonctionner. J'ai fait une demande pour le item_id dans l'URL mais il ne me le donnera pas. Cela me donne cependant un nom d'utilisateur. –

Questions connexes