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

Apache Discussion :

[.htaccess] Remplacer underscore par tiret dans les URL


Sujet :

Apache

  1. #1
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut [.htaccess] Remplacer underscore par tiret dans les URL
    Bonjour,

    Je cherche un peu d'aide sur la formulation d'un RewriteRule dans un fichier .htaccess.
    Ce que je cherche à faire c'est seulement de remplacer les underscores par des tirets dans mes URL
    ex: monsite.com/banque_commerciale_sud en monsite.com/banque-commerciale-sud

    Je vais cela pour améliorer le référencement du site car il semble que les moteurs n'aiment pas trop les underscores dans les liens.
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    banque_commerciale_sud correspond à quelque chose ? Il y a déjà un .htaccess ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteRule ^(.*)-(.*)-(.*)-(.*)$ $1_$2_$3_$4 [PT,L]
    RewriteRule ^(.*)-(.*)-(.*)$ $1_$2_$3 [PT,L]
    RewriteRule ^(.*)-(.*)$ $1_$2 [PT,L]
    Ça marche mais je pense que ce n'est pas optimisé car cela traite tout l'URL or j'aimerais me focaliser sur la dernière chaine après / (ex: /banque_commerciale_sud)
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Au lieu de mettre .* mets [^/]*

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Où mettre [^/]* plus exactement?

    En fait, question référencement, est-ce vrai que les moteurs (Google) n'aiment pas trop les underscores mais préfèrent les tirets?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Au lieu de mettre .* mets [^/]*
    Ca me paraît pourtant clair

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteRule ^([^/]*)-([^/]*)-([^/]*)-([^/]*)$ $1_$2_$3_$4 [PT,L]
    RewriteRule ^([^/]*)-([^/]*)-([^/]*)$ $1_$2_$3 [PT,L]
    RewriteRule ^([^/]*)-([^/]*)$ $1_$2 [PT,L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Oui j'avais fait cela mais erreur 404

    Mon code d'avant marche mais je cherche à l'optimiser mais bon, ça va pour mes liens mais ça ne s'appliquera pas à www. monsite. org / test_accueil_nord / rakoto_jean / finance_comptabilite / carte_sejour.php car il va falloir que j'ajoute un rewriterule pour 5 underscores, c'est pour ça que je cherche un rewriterule testant les entre /xxx/
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Je peux me tromper mais la règle idéale ne serait-elle pas : "remplacer tous les _ par des -" ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  9. #9
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Oui c'est ça _Mac_ mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteRule ^(.*)-(.*)-(.*)-(.*)$ $1_$2_$3_$4 [L,QSA]
    RewriteRule ^(.*)-(.*)-(.*)$ $1_$2_$3 [L,QSA]
    RewriteRule ^(.*)-(.*)$ $1_$2 [L,QSA]
    est le meilleur que j'ai pu écrire, est-il possible qu'un seul rewriterule suffirait?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui, en ne gardant que la dernière ligne.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  11. #11
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Oui ça marche, là j'avoue que je suis très novice en regex même
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  12. #12
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Ton expression régulière est exactement celle qu'il faut et fonctionne comme tu le penses. Le seul truc c'est que le [L] n'arrête pas le traitement de l'URL pour de bon : il va arrêter le cycle de réécriture en cours mais un suivant va recommencer. La réécriture d'URL ne s'arrêtera que lorsque l'URL d'entrée ne sera plus modifiée par les règles, donc dans ton cas lorsque tous les - auront été remplacés par des _.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  13. #13
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    J'ai encore un service à demander: en fait le remplacer que je cherche c'est donc à réécrire www.lesiteweb.com/madagascar-plan-du-site en son véritable url correct www.lesiteweb.com/content/plan_du_site

    En fait, que veut dire [L,QSA], [PT,L] => je cherche des tutos sur ça
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  14. #14
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour ce genre d'info, le meilleur tuto que je connais est la doc Apache, source de toute chose, n'est-ce pas

    http://httpd.apache.org/docs/2.2/mod...ml#rewriterule
    http://httpd.apache.org/docs/2.2/rew...ite_intro.html

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  15. #15
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Oui c'est vrai _Mac_

    Mais une petite question qui n'a plus rien à voir avec le remplacement de tiret par underscore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteRule ^madagascar-(.*)-(.*)$ index.php/contenu/$1_$2 [L]
    RewriteRule ^madagascar-(.*)$ index.php/contenu/$1 [L]
    RewriteRule (.*)(?!index\.php/)(.+)$ index.php/$0 [L]
    Ça ne marche pas, il faut commenter la dernière ligne pour que ça passe! Pourquoi? Le truc [L] n'arrête-t-il pas la lecture dès que l'expression de la ligne correspondante est satisfaite?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  16. #16
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Au risque de me répéter...
    Citation Envoyé par _Mac_ Voir le message
    Le seul truc c'est que le [L] n'arrête pas le traitement de l'URL pour de bon : il va arrêter le cycle de réécriture en cours mais un suivant va recommencer. La réécriture d'URL ne s'arrêtera que lorsque l'URL d'entrée ne sera plus modifiée par les règles.
    Ton dernier filtre (.*)(?!index\.php/)(.+)$ matche le résultat de la réécriture des deux règles précédentes (index.php/contenu/...).

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  17. #17
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Ah bon j'avais que [L] arrête la réécriture dès que l'expression de ligne où il se trouve est satisfaite?

    Ce que je cherche à faire c'est ajouter index.php à l'URL s'il ne l'a pas
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  18. #18
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Le plus simple c'est de passer par une condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_URI} !index\.php
    RewriteRule (.*) index.php/$1 [L]
    mais avec cette règle tu auras des problèmes avec tes images, par exemple. Il faut donc ajouter d'autres conditions pour dire de ne pas appliquer la règle si on demande un .jpg, .css, etc. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{REQUEST_URI} !\.css$
    RewriteCond %{REQUEST_URI} !\.jpg$
    RewriteCond %{REQUEST_URI} !\...$
    RewriteCond %{REQUEST_URI} !index\.php
    RewriteRule (.*) index.php/$1 [L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  19. #19
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Ah bon! Je ne savais pas que l'url-rewriting s'appliquait aussi aux chemins d'image et de css (généralement les attributs src= en html)

    Ah oui j'ai compris c'est le test RewriteCond %{REQUEST_URI} !index\.php qui fait que tout est remplacé (url, uri)

    En gros, ton conseil a donné un début de solution, il faut tester toutes les extensions possibles donc .js, .doc, .xls, .pdf
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

Discussions similaires

  1. Upload de fichier : remplace underscore par tiret
    Par Saphir09 dans le forum Langage
    Réponses: 9
    Dernier message: 31/05/2011, 12h12
  2. remplacer espace par tiret dans formulaire
    Par referenceur-tv dans le forum Langage
    Réponses: 17
    Dernier message: 03/06/2008, 14h52
  3. [VBA-E]Remplacement virgules par tabulation dans un fichier texte
    Par Mlezen dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/05/2006, 14h03
  4. Réponses: 1
    Dernier message: 23/03/2006, 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