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

Langage PHP Discussion :

Url réécrite sur la page de destination


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut Url réécrite sur la page de destination
    Bonjour,

    je suis en train de mettre en place une réécriture des URL sur un site en PHP mais un truc m'échappe:

    exemple: dans une page, je fabrique un lien du style

    /nom-article-12/ (avec le 12 extrait d'une requête de base de données)

    et à travers une règle de réécriture, je le fais pointer par exemple vers

    /site.com/liste_article.php?ID=12

    ça marche!!

    par contre, est ce que je peux faire figurer dans la barre d'adresse de la page qui est atteinte le lien "humain" (/nom-article-12/) plutôt qe l'URL réelle?
    Je sais que c'est possible puisque c'est comme ça que ça fonctionne avec Wordpress, mais je n'arrive pas à le mettre en place.

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2010
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 144
    Points : 241
    Points
    241
    Par défaut
    La réécriture d'url se fait du coté du serveur web, et non en PHP. Un peu de documentation pour les serveurs Apache :
    http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
    http://apache.developpez.com/cours/urlrewriting/#L5

  3. #3
    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
    Pas clair ... Quelle est la règle en question ? Vous ne faites pas une redirection mais une réécriture interne (ie pas de flag R ni usage d'une URL mais un chemin pour la "redirection") ? Avez-vous bien changé vos liens (a href="nom-article-12" et non a href="liste_article.php?ID=12") ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par gmarsay Voir le message
    La réécriture d'url se fait du coté du serveur web, et non en PHP.

    oui, je le savais déjà mais je cherchais une réponse à une question précise.....faire apparaître l'URL humaine dans la barre d'adresse de la page de destination.. ça j'arrive pas à faire..

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Montres nous ton .htaccess et on pourra surement t'en dire plus sur ce qui ne va pas.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    bon voila un exemple de travail:

    je créé un lien de test comme ceci dans ma page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <a href="voiture-<?php echo $row_rsLast3['ID']; ?>" target="_blank">Lien test</a>
    mon.htaccess ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Options +FollowSymlinks
    RewriteEngine On
    RewriteRule ^voiture-([0-9]+)$  http://desport/liste_detail.php?ID=$1  [L]
    donc le lien http://desport/voiture-58 va ouvrir la page http://desport/liste_detail.php?ID=58 ça fonctionne et ça me va..

    mais ce que je veux c'est que quand la page http://desport/liste_detail.php?ID=58 est ouverte, je veux avoir http://desport/voiture-58 dans la barre d'adresse, comme c'est le cas avec Wordpress...

    comment fait on ça??

    merci

  7. #7
    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
    Il serait plus logique d'utiliser un chemin non une URL qui donne lieu a une redirection :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1 [L]

    Et il n'est pas véritablement possible de faire en sorte que liste_detail.php?ID=58 ne soit plus utilisable au niveau de la réécriture, ça oblige à une "bidouille" de ce genre :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{QUERY_STRING} !(?:^|&)internal_redirect=1(?:&|$)
    RewriteCond %{QUERY_STRING} (?:^|&)ID=(\d+)(?:&|$)
    RewriteRule ^liste_detail\.php$ voiture-%1 [R=permanent,L]
    
    RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1&internal_redirect=1 [L]
    (non testé)

    Enfin, Wordpress ne doit pas gérer cela directement par la réécriture, mais par un script vers lequel tout est renvoyé. Ce qui serait, dès lors, totalement différent.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    Merci julp !!!!!!!!!!!

    ça marche, je comprends pas encore trop pourquoi, mais ça marche......

    c'est super , je te remercie....

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    ah, j'avais pas encore vu l'edit de ton message.....

    par contre si ça marche en local en utilisant ta règle RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1 [L] , j'ai un message d'erreur sur le site réel, comme ceci

    The requested URL /AMENFRHOME/hostnd/8/9/8/898110/www/htdocs/web/liste_detail.php was not found on this server.

    EDIT: ça marche en fait en rajoutant le slash de la racine du site devant l'adresse comme ceci

    RewriteRule ^voiture-([0-9]+)$ /liste_detail.php?ID=$1 [L]

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    [quote=julp;6141482]
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{QUERY_STRING} !(?:^|&)internal_redirect=1(?:&|$)
    RewriteCond %{QUERY_STRING} (?:^|&)ID=(\d+)(?:&|$)
    RewriteRule ^liste_detail\.php$ voiture-%1 [R=permanent,L]
    
    RewriteRule ^voiture-([0-9]+)$ liste_detail.php?ID=$1&internal_redirect=1 [L]

    Sinon, tout ce code là, ça fait quoi???

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    J'ai encore un peu besoin de votre aide.....

    j'ai modifié ma règle Rewrite et mes liens de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^vehicule-occasion-([0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$  /liste_detail.php?ID=$1  [L]
    code du lien dans la page web
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       <a href="vehicule-occasion-<?php echo $row_rsLast3['ID']; ?>-<?php echo utf8_encode($row_rsLast3['marque']); ?>-<?php echo utf8_encode($row_rsLast3['modele']); ?>">
    ça marche, par contre ça plante si il y a un blanc dans un champ (Alfa Romeo par exemple)
    on peut lui dire dans l'expression régulière qu'il peut y avoir des espaces ?

    et ça déconne aussi si il y a des accents ( Citroën par exemple), ça affiche des caractères cabalistiques du genre

    The requested URL /vehicule-occasion-51-Citroën-C4 was not found on this server.

    alors que le lien est bien formé dans la barre d'état....

    merci
    Images attachées Images attachées  

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    j'avais résolu mon problème d'accent avec cette règle

    RewriteRule ^voiture-occasion-([0-9]+)-([a-zA-Z0-9àùéèäë\.\-\ ]+)-([a-zA-Z0-9àùéèäë\.\-\ ]+)$ /liste_detail.php?ID=$1 [L]


    ça marche sur le site réel www.desport-auto.com

    mais voilà que tout d'un coup, sans crier gare la règle ne fonctionne plus en local...
    en faisant par élimination, je m'aperçois que c'est quand j'introduis les accents que ça ne marche plus, il m'indique qu'il y un erreur sur le serveur:

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.


    ma règle est elle correcte?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    Au secours je vais péter un câble ....

    ma règle ne fonctionne plus si des caractères accentués comme le à

    ça fonctionne avec ë mais pas avec à

    par exemple cette règle fonctionne

    RewriteRule ^voiture-occasion-([0-9]*)-([a-zA-Z0-9ë\.\-\ ]*)-([ëa-zA-Z0-9\.\-\ ]*)$ /liste_detail.php?ID=$1 [L]

    (j'ai mis en gras les caractères spéciaux)

    mais je remplace le ë par un à cette règle fait planter le serveur, la page ne s'affiche pas

    RewriteRule ^voiture-occasion-([0-9]*)-([a-zA-Z0-9à\.\-\ ]*)-([ëa-zA-Z0-9\.\-\ ]*)$ /liste_detail.php?ID=$1 [L]

    pourtant ça a marché pendant 2h avant, j'y comprend plus rien.

    au secours

  14. #14
    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
    Les caractères variables (par rapport à l'encodage), comme les caractères accentués, sont possibles dans une URL mais vous dépendez ensuite : d'une part de la manière dont l'URL est transmise (son encodage) et, d'autre part, de l'implémentation du serveur.

    Conclusion : oubliez les accents (+/- translitération) et/ou généralisez.

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^voiture-occasion-(\d+)- /liste_detail.php?ID=$1 [L]
    Ne pourrait-il pas suffire ?

    Parce que vous ne pourriez même pas utiliser :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^voiture-occasion-(\d+)-[^-]+-[^-]+$ /liste_detail.php?ID=$1 [L]
    Puisque votre séparateur (-) n'en est pas un, en réalité.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    Merci d'avoir répondu

    Citation Envoyé par julp Voir le message
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^voiture-occasion-([0-9]*)- /liste_detail.php?ID=$1 [L]
    Ne pourrait-il pas suffire ?

    ben non, puisque je veux que les noms apparaissent dans l'URL... référencement oblige...

    ou alors faudrait il que dans ma page web, par exemple, je remplace ë par e, é par e , à par a , etc???

    Je crois que je vais faire une pause, j'ai la tête comme un chaudron lol

  16. #16
    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 Lionel_aw Voir le message
    ben non, puisque je veux que les noms apparaissent dans l'URL... référencement oblige...
    Euh, qu'est-ce qui vous en empêche ? La règle n'est pas ancrée sur la fin ...

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    Julp, j'ai suivi ton conseil.... j'ai éliminé les accents dans tout ce que je mets dans le href du lien..

    j'ai créé une fonction comme ceci pour enlever les accents et remplacer les espaces par des points

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function accentOff($chaine)		{
    	$chaine = str_replace("ë","e",$chaine);
    	$chaine = str_replace("à","a",$chaine);
    	$chaine = str_replace("ù","u",$chaine);
    	$chaine = str_replace("é","e",$chaine);
    	$chaine = str_replace("è","e",$chaine);
    	$chaine = str_replace("ö","o",$chaine);
    	$chaine = str_replace(" ",".",$chaine);
    	return $chaine;
    	}
    je l'applique à mes champs avant de les intégrer dans l'URL, comme ça, je peux afficher Citroën dans la page et il y a Citroen dans l'URL comme ça ça plante plus...

    c'est peut être pas la meilleure solution, mais ça marche.

    voici ma dernière règle de Rewrite.

    RewriteRule ^voiture-occasion-([0-9]*)-([a-zA-Z0-9\.]*)-([a-zA-Z0-9\.]*)$ /liste_detail.php?ID=$1 [L]


    Citation Envoyé par julp Voir le message
    Euh, qu'est-ce qui vous en empêche ? La règle n'est pas ancrée sur la fin ...
    excuse, j'ai pas compris comment la règle n'était pas ancrée...

  18. #18
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2010
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 144
    Points : 241
    Points
    241
    Par défaut
    Avec les frameworks symfony et Django (je sais pas si Wordpress utilise le même principe, mais surement) on utilise des "slug". C'est une méthode qui permet de convertir une chaine de texte en une chaine pouvant être utilisé dans une url.
    Exemple : Citroën -> citroen, Alpha Romeo -> alpha-romeo

    Le slug est enregistré directement dans un champs la base de données et il peut être personnaliser (ne pas être identique à la chaine de base) dans les cas ou une simplification s'impose. Un exemple de fonction permettant de générer des slugs : http://www.waibdev.com/developpement...aire-des-slugs

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 121
    Points : 49
    Points
    49
    Par défaut
    Merci guillaume, mais là ma solution semble fonctionner
    j'ai remplacé les espaces par des points car le tiret est utilisé dans ma chaine rewrite mais en fait je me suis aperçu que comme je ne récupère que le "$_GET['ID']", ce qu'il y a après importe peu dans ce cas.

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/11/2009, 20h43
  2. Réponses: 3
    Dernier message: 31/08/2009, 14h57
  3. Insérer une image locale en fond d'écran sur une page (sans url)
    Par Marc22 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 19/07/2009, 16h11
  4. Réponses: 4
    Dernier message: 08/07/2008, 11h43
  5. URL identiques sur chaque page ?
    Par JmL40 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 8
    Dernier message: 20/02/2008, 16h46

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