Url rewrite

Discussion dans 'URL Rewriting et .htaccess' créé par aurore2322, 17 Septembre 2013.

  1. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Bonjour à tous et à toutes,
    Je viens vers vous car cela plusieurs jours que je plante sur la réécriture d’url de mon site internet, et la je ne vois pas comment je pourrais m’en sortir.
    J’ai pourtant lu pas mal de sujet du forum et de la doc, mais je vous l’avoue je pêche un peu.

    Un grand merci d’avance à ce qui pourrait me faire progressé dans l’obscurité de l’url rewrite.

    Avant tout, voici les différentes structures des urls de mes pages

    ?page=111&metier=0035

    voici le fichier htaccess


    Code:
    Options +FollowSymlinks
    RewriteEngine On
    
    
    RewriteRule ^metier-([0-9]+)-([0-9]+)\.html$  index.php ?page=$1&metier=$2  [L]
    
    
    cela fonctionne et me donne bien :

    metier-111-35.html

    le première question que je me pose c’est :
    dans ce cas je souhaiterais mettre en place une condition pour dire si c’est la page 111 alors on commence par metier-XX-XXX.html, mais si c’est page=44 alors on commence par actu-XX-XXX.html.

    La deuxième question que je me pose c’est qu’au lieu d’avoir

    metier-111-35.html j’obtienne metier-assistante-de-direction.html si le metier 35 est renseigné dans ma base de données comme libelle assistante de direction ?

    Mais la du coup, je ne vois absolument pas comment appréhender cette problèmatique.

    Merci encore si quelqu’un peut m’apporter un peu de lumière.

    Aurore
     
  2. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Tu auras besoin de RewriteCond. Si tu as un problème ou que tu n'y arrives pas, dis-le et on verra ensemble.

    Tu dois faire ça du côté PHP et non dans ton htaccess malheureusement.
     
  3. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Bonjour Giustino et merci pour ta réponse

    en fait j'avais commencé à regarder avec RewriteCond mais ça ne fonctionnait pas.
    Le pense que ma regle n'est pas bonne. Je pensais mettre en place condition avec query_string ?

    Code:
    Options +FollowSymlinks
    RewriteEngine On
    
    RewriteCond %{query_string} ^page=20$
    RewriteRule ^index\.php$ /metier.html? [R=301,L]
    
    RewriteCond %{query_string} ^page=50$
    RewriteRule ^index\.php$ /stage.html? [R=301,L]
    
    #RewriteRule ^metier-([0-9]+)-([0-9]+)\.html$  index.php ?page=$1&metier=$2  [L]
    
     
    suis-je sur la bonne piste ?

    Merci d'avance.
     
  4. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Pour ce qui est du PHP, côté génération du lien en dynamique en fait j'y suis presque sauf que ca ne marche pas dans certain cas :

    metier_0014_203_charge-d-encadrement.html ne me renvoyait pas vers la page du coup j'ai ajouté un troisième paramètre dans la règle ci-dessous et dans ce cadre la ça ne fonctionne que si mon métier n'est constitué que d'un seul mot.

    par contre

    metier_0014_203_toto.html me renvoie vers la bonne page.

    Du coup peut on éviter d'avoir à insérer param $3 ?
    Sinon quelle est la règle pour avoir en 3ème paramêtre [a-z] et facultativement - (tiret)


    Code:
    RewriteRule ^metier_([0-9]+)_([0-9]+)_([a-z]+)\.html$  index.php?page=$1&metier=$2&libelle=$3  [L]
    

    Merci d'avance.
     
  5. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    C'est en effet une bonne piste au niveau du RewriteCond et du %{QUERY_STRING} mais peux-tu (re)dire exactement ce que tu veux (chaque cas) au niveau redirection etc.

    Pour autoriser le tiret avec les lettres de a à z minuscules, voici la syntaxe:
    Code:
    [a-z\-]
    Tout simplement :)
     
  6. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Merci Giustino pour ta participation.
    j'ai réussi à faire à peu près ce que je voulais.
    ave ton info sur [a-z\-]

    Mais du coup je me pose un question sur le Duplicate content

    En fait j'ai des pages sur ce format qui sont indexés par Google :
    index.php?page=10&metier=14
    index.php?page=10&metier=43
    ...

    le problème c'est qu'avec ma réécriture suivante :

    Code:
    RewriteRule ^metier_([0-9]+)_([0-9]+)_([a-z]+)\.html$  index.php?page=$1&metier=$2&libelle=$3  [L]
    j'obtiens une nouvelle url du type

    metier_maitre_nageur_10_14.html
    directeur_10_43.html

    qui vont être indexé par Google et du coup deux adresses pour la même page donc contenu dupliqué.
    Et en fait j'ai un sacré paquet de page comme ça du coup je ne vais pas pouvoir faire des redirection 301 pour chacune d'elle du coup je voulais savoir si je pouvais automatiser ça en 301 avec une RewriteRule

    Merci d'avance.
     
  7. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Merci Giustino pour ta participation.
    j'ai réussi à faire à peu près ce que je voulais.
    ave ton info sur [a-z\-]

    Mais du coup je me pose un question sur le Duplicate content

    En fait j'ai des pages sur ce format qui sont indexés par Google :
    index.php?page=10&metier=14
    index.php?page=10&metier=43
    ...

    le problème c'est qu'avec ma réécriture suivante :

    Code:
    RewriteRule ^metier_([0-9]+)_([0-9]+)_([a-z]+)\.html$  index.php?page=$1&metier=$2&libelle=$3  [L]
    j'obtiens une nouvelle url du type

    metier_maitre_nageur_10_14.html
    directeur_10_43.html

    qui vont être indexé par Google et du coup deux adresses pour la même page donc contenu dupliqué.
    Et en fait j'ai un sacré paquet de page comme ça du coup je ne vais pas pouvoir faire des redirection 301 pour chacune d'elle du coup je voulais savoir si je pouvais automatiser ça en 301 avec une RewriteRule

    Merci d'avance.
     
  8. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    En fait j'ai trouvé une solution pour l'automatisation en PHP en faisant un boucle sur mes tuples ce qui me génère un ensemble de ligne comme celle-ci :

    Code:
    RewriteCond %{REQUEST_URI} /?page=10&metier=34
    RewriteRule ^(.*) /metier_surveillant-de-nuit_0034_10.html [L,R=301]
    
    Sauf que ma redirection ne fonctionne pas. Une idée ?

    Autre interrogation, est-ce qu'il est possible que mon fichier htaccess contenant un grand nombre de redirection 301, environ 4000 lignes comme celles au dessus puisse pénaliser le référencenement du site internet ?


    ou pas ? à mon sens non, mais bon je préfère avoir votre avis.

    Merci d'avance
    :)

    Aurore
     
  9. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    désolé, j'arrive après la bataille, mais ça sert à quoi de gérer tout ça dans le .htaccess, avec toutes ces conditions ?
    car 4000 lignes c'est impensable

    pourquoi ne pas tout simplement gérer les redirections dans le PHP ?
    si l'URL demandée n'est pas celle attendue, alors tu fais une 301 vers l'URL officielle (la canonique)

    au passage, remplace tes underscore par des tirets, car le signe underscore n'est pas un séparateur de mots pour Google
     
  10. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Bonsoir et merci pour ta réponse.... Je vais changer l.underscore :)
    Si je voulais faire ça dans htacess c est que je ne vois pas bien comment faire ca en php...
    Comment puis je traiter ca?
    Unenpetite piste

    Merci d.avance
     
  11. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
  12. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Merci pour ta réponse,
    je viens de regarder sauf que dans mon cas la variable d'environnement serveur me renvoie le fichier PHP qui génére ma fiche sans les parametres.

    En gros mon page index.php?page=12&metier=14 si je fais $_SERVER[URI] cela me retourne display_result.php qui est le fichier qui recoit en ajax ma fiche.

    Du coup la je comme à être inquiète.
    y aurait'il une autre solution ? est ce totalement pénalisable d'avoir 4000 redirections dans htaccess. (ralenti lecture site ? ou autre ?)

    Merci pour vos pistes.
    Aurore.
     
  13. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    regarde le contenu de $_SERVER et pioche dedans les infos qu'il te faut
     
  14. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    j'ai bien regardé en faisant un print_r($_SERVER) je n'ai aucune info qui me permet de connaitre l'url de la page, je n'ai que l'url du fichier qui recoit la function f_open de php.

    Je crois que la solution avec le header ne peut pas se faire dans mon cas.

    pas d'info sur le nombre de ligne dans le htaccess? vraiment une hérésie ?
     
  15. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    redis-nous exactement ce que tu as comme URL et vers quoi tu veux la rediriger
    ainsi que le contenu de SERVER
     
  16. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Merci pour votre aide et ta patience.

    Mes pages indexées dans google sont de la forme :
    /index.php?page=2&metier=33

    Ensuite j'ai codé une nouvelle url avec PHP pour inclure après lecture de la table métier l'intitulé du métier.
    et la réécriture donne comme url :
    /metier-conducteur-de-travaux-2-33.html suivant la règle du htaccess suivante :

    Code:
    RewriteRule ^metier-([a-z]+)-([0-9]+)-([0-9]+)\.html$  index.php?page=$1&metier=$3&libelle=$1  [L]
    
    et mon contenu $_SERVEUR me donne :

    Code:
    Array ( [HTTP_HOST] => metier.demo [CONTENT_LENGTH] => 819 [CONTENT_TYPE] => application/x-www-form-urlencoded [PATH] => /usr/bin:/bin:/usr/sbin:/sbin [SERVER_SIGNATURE] =>
    Apache/2.0.63 (Unix) PHP/5.2.13 DAV/2 Server at metier.demo Port 80
    [SERVER_SOFTWARE] => Apache/2.0.63 (Unix) PHP/5.2.13 DAV/2 [SERVER_NAME] => metier.demo [SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80 [REMOTE_ADDR] => 127.0.0.1 [DOCUMENT_ROOT] => /Volumes/www/metier/[SCRIPT_FILENAME] => /Volumes/www/metier/front/modules/metier_search/display_result.php [REMOTE_PORT] => 51943 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.0 [REQUEST_METHOD] => POST [QUERY_STRING] => [REQUEST_URI] => /front/modules/metier_search/display_result.php [SCRIPT_NAME] => /front/modules/metier_search/display_result.php [PHP_SELF] => /front/modules/metier_search/display_result.php [REQUEST_TIME] => 1379687473 [argv] => Array ( ) [argc] => 0 ) 
    
    Merci d'avance pour votre aide
     
  17. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    et donc la question est ?
     
  18. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    ma question est :

    compte tenu de la situation j'ai deux url pour un même contenu donc duplicate content pour Google.
    Du coup je voulais spécifier des redirections 301 pour dire en gros

    si tu trouves /index.php?page=10&metier=34 alors redirection 301 vers url reecrite :
    Code:
    RewriteCond %{REQUEST_URI} /?page=10&metier=34
    RewriteRule ^(.*) /metier_surveillant-de-nuit_0034_10.html [L,R=301]
    
    et ce pour toutes les pages (même si j'en ai 2000)

    hérésie ?
     
  19. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    tu mélanges 2 serveurs (test et prod), non ?
    car je vois display_result.php alors que ça devrait être index.php
     
  20. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    non, en fait c'est que display_result est plaqué en f_open dans l'index.php à travers différentes fonctions.

    je vais essayer de tester en amont du coup, mais sinon on ne peut pas faire coller trop de ligne dans htaccess ?
     
  21. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    non il ne faut pas utiliser .htaccess dans ce cas

    dans index.php, au début du script, tu testes si l'URL demandée est du type index.php?page=X&metier=Y
    si c'est le cas, tu récupères via une requête mysql les libellés à mettre dans l'URL et tu fais une redirection (en PHP) vers la bonne URL
     
  22. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Super ça a l'air de fonctionner, je n'avais pas pensé à court-circuiter mes f_open ajaxx et attaquer directement le fichier index.php

    Merci beaucoup de ta patience.
    Seul petit bémol mais j'ai un boucle de redirection en faisant comme cela.

    C'est à dire un test brut à la racine index.php :

    Code:
    if (isset($_GET["page"])&& isset($_GET["metier"]) && $_GET["metier"]==14 && $_GET["page"]==10)
             { 
             header("Status: 301 Moved Permanently", false, 301);
             header("location:http://local/metier-conducteur-travaux-10-14.html");
             exit;
             }
    
    avec le fichier .htaccess suivant :

    Code:
    RewriteRule ^metier-([a-z]+)-([0-9]+)-([0-9]+)\.html$  index.php?page=$2&metier=$3&libelle=$1  [L]
    
    Là, du coup, je ne comprends pas pourquoi ...
     
  23. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    C'est normal que tu obtiennes une boucle de redirection car l'un pointe sur l'autre.
    J'ai parlé de ca dans quelques postes précédents, soit tu restes dans ton htaccess soit tu fais ca en php mais dans les deux cas il faudra "contourner" ce probleme de boucle.
    Solution: rajouter un parametre get (voir par exemple ma réponse ici: https://www.webrankinfo.com/forum/t...01-r-301-l-ne-fonctionne-pas-ensemble.167849/)
     
  24. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    je t'ai conseillé de tester si l'URL demandée est du type index.php?page=X&metier=Y
    et toi tu testes si les variables sont connues, mais elles le sont que l'URL soit du type index.php?page=X&metier=Y ou metier-conducteur-travaux-10-14.html
     
  25. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    @Giustino : j'ai lu ton exemple mais du coup je ne vois pas trop si cette variable je dois l'ajouter dans htaccess ou dans la redirection 301 en php

    @Olivier : effectivement j'ai testé dans une premier temps pour voir si un test sur l'url et une redirection pouvait fonctionner dans le fichier index. Du coup effectivement mon print_r($_SESSION) me donne bien ici une url avec mes GET.

    pour ce qui est du test je ne suis pas super sûre de mon coup :


    Code:
    $url = $_SERVER['REQUEST_URI'];
    if (preg_match('#^/?page=+.[a-zA-Z]&metier=+.[0-9]#i', $url))
    		{
    		header("Status: 301 Moved Permanently", false, 301);
    		header("Location: http://local/".$url_attendue);
    		exit;
    		}
    
    Y-at'il un autre moyen qu'avec une regex ?

    Désolé pour mes incompétences et mes maladresses, je rame un peu mais je vous suis reconnaissante pour vos coups de pouces
     
  26. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    19 850
    J'aime reçus:
    457
    oui c'est quelque chose dans ce style
     
  27. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    ok je vais approfondir cela,
    mais du coup cela va t'il pallier à ma boucle de redirection ou vais-je devoir introduire un paramètre comme me l'a suggéré Giustino ?
     
  28. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Non, uniquement dans le cas où tu le fais via ton htaccess mais via php c'est ok normalement
     
  29. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    merci encore pour votre aide.
    Je sens que je ne suis plus très loin de but, mais je butte sur la redirection en boucle.

    j'ai essayé de rajouter un paramètre &stop dans la Rewrite Rule dans mon htaccess mais cela ne change rien au niveau de ma boucle de redirection.

    Code:
    RewriteRule ^metier-([0-9a-zA-Z_-]+)-([0-9]+)-([0-9]+)\.html$  index.php?page=$3&metier=$2&libelle=$1&stop  [L]
    
    Est ce que j'ai oublié ou mal placé quelquechose ?? une idée ?
    Merci d'avance.
     
  30. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Ah donc même avec php tu as cette boucle de redirection ? Je pensais que ça ne ferait pas la même chose qu'avec le htaccess.
    Le principe est correct, et dans ton code php tu dois vérifier quelque chose du style:

    Code:
    if (!isset($_GET['stop']))
         // faire la redirection vers l'url réécrite
    
    afin de ne pas réécrire en boucle (si la variable "stop" est détectée cela veut dire que l'url entrée est bien le format réécrit mais il pointe sur cette page malgré tout, à la seule différence que la variable "stop" permet de définir l'état de redirection.
     
  31. aurore2322
    aurore2322 Nouveau WRInaute
    Inscrit:
    17 Septembre 2013
    Messages:
    20
    J'aime reçus:
    0
    Super !!! ça fonctionne.
    Un grand merci vraiment sincère pour votre aide avec un peu de retard tout de même.
    Du coup il ne me reste plus qu'à mettre cela en place/

    Du coup url rewriting et redirection 301 ne devrait pas me faire perdre mon positionnement si je le mets en place ?
     
  32. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Si tu l'utilises judicieusement et que c'est mis en place correctement, alors tu ne peux qu'améliorer ton référencement (ou du moins, ne pas le détériorer)
     
Chargement...
Similar Threads - rewrite Forum Date
Rewrite url manuel URL Rewriting et .htaccess 19 Avril 2020
RegExp du Rewrite URL Rewriting et .htaccess 19 Décembre 2019
Ne prendre qu'une partie d'un QueryString dans une regex RewriteCond URL Rewriting et .htaccess 9 Décembre 2019
Astuce RewriteMap : convertir un .dbm.pag en txt ? Débuter en référencement 8 Juillet 2019
rewriteRule sur wamp erreur 404 URL Rewriting et .htaccess 20 Avril 2019
URL Rewriting : difficultés avec RewriteCond ? URL Rewriting et .htaccess 5 Décembre 2018
Problème avec ma ligne rewrite URL Rewriting et .htaccess 20 Juin 2018
Déplacer les RewriteRule du .htaccess vers le vhost URL Rewriting et .htaccess 16 Janvier 2018
Rewrite URL comment faire Débuter en référencement 17 Septembre 2017
Rewrite repertoire virtuel -> erreur 404 suite à maj serveur URL Rewriting et .htaccess 24 Juin 2017