eclairage sur les principes de l'url rewriting

Discussion dans 'URL Rewriting et .htaccess' créé par raoux, 22 Février 2008.

  1. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Bonjour.

    après avoir mis en place avec succès mes 1es réécritures d'Url, en m'appuyant notamment sur cet excellent tuto https://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting,
    je m'aperçois avec stupeur que j'escomptais un tout autre résultat.

    Je pensais que le serveur allait me renvoyer ma page exemple.php?var=$1&var2=$2... avec une url réécrite (exemple-$1-$2.html par ex.).

    Or c'est l'inverse. C'est en appelant exemple-$1-$2.html que j'affiche sa déclinaison php.

    Donc si je veux que les moteurs et les clients lisent l'URL exemple-$1-$2.html au lieu de l'URL php, que dois-je mettre en place en sus d'un bon .htaccess ?

    Ne suis-je donc qu'un sot?

    Merci.
     
  2. mariea
    mariea WRInaute impliqué
    Inscrit:
    6 Mai 2005
    Messages:
    561
    J'aime reçus:
    0
    Le moteur de rewriting sert à extraire des variables (selon la ou les règles que tu définis dans le fichier .htaccess) à partir d'URL qui sont présentes dans ton site, et à les transmettre au module php sous forme de variables globales.

    au lieu de placer des url encodées sous la forme peu lisible par les moteur de reherche exemple.php?var=$1&var2=$2

    tu peux, une fois la regle mise en place, les écrire sous cette forme : exemple-1-2.html
     
  3. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Tu as du mal lire un truc ...
    il faut que les liens de ton site soient :
    Code:
    <a href="exemple-$1-$2.html">lien</a>
    
    Si c'est l'URL de ta page PHP qui est affichée, c'est qu'il y a un binz
     
  4. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Ce qui implique notamment que je doive réécrire tous les liens internes du site au format html, après avoir mis en place les règles de réécriture?

    Dans le cas d'un formulaire de recherche avec de multiples entrées par exemple, qui génère des pages à 7 variables et où les combinaisons de sortie sont innombrables, comment faire?

    D'une manière générale je ne vois pas très bien comment effectuer la mise en place pour les pages dynamiques? Ce n'est pas la reecriture en soi qui me pose probleme, mais la mise en place globale.

    Enfin, quid du pb de contenu dupliqué, lorsque GGBot indexera des pages dont il a déjà le contenu sous une autre URL?

    Merci.
     
  5. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Alors :

    Pour les pages issues des formulaire, pas de souci, les moteurs ne savent pas utiliser les formulaires.

    Pour le reste, Oui, il te faudra ;

    - modifier tous les liens du site au format "réécrit"
    - mettre en place des redirections 301 des pages exemple.php?var=$1&var2=$2... vers les pages exemple-$1-$2.html pour éviter le duplicate content.
     
  6. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    C'est beaucoup plus clair a présent, merci.

    Dernier éclaircissement, mais au pire je retournerai fouiller dans les multiples topics qui semblent parler de ça.

    Au sujet des redirects 301, si je termine ma RewriteRule ^test\.html$ /test.php par [R=301], c'est la page html qui est redirigée vers la page php et non l'inverse. Bigre.

    ET même si on sort on peut du cadre de ce topic, Il doit bien y avoir une solution pour indexer et mettre a dispo des moteurs des urls réécrites a partir de ces pages générées par formulaire? Une piste? Sinon c'est un matériel de référencement fantastique qui est gaspille.

    merci en tous cas pour vos réponses rapides et claires. Voila du forum comme on aime :D
     
  7. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    En fait, tu veux le beurre et l'argent du beurre :wink:

    Les pages html doivent etr einterpretées par des pages php
    les pges php doivent etre récrites en html.

    C'est possible, en utilisant un paramètre bidon en plus (merci webmasterlamogere...).

    Par exemple si on a les pages exemple-par1-par2.html et exemple.php?var1=par1&var2=par2, tu peux utiliser les deux règles suivantes, de mémoire:

    Code:
    RewriteRule ^exemple-([^-]+)-([^-]+)\.html exemple.php?stop&var1=$1&var2=$2 [L]
    
    RewriteCond %{QUERY_STRING} ^var1=(.*)&var2=(.*)$
    RewriteRule exemple\.php exemple-%1-%2.html? [R=301,L] 
    
    La premiere doit correspondre plus ou moins a ce que tu fais déjà. La deuxième est une redirection externe des php vers les html. Ca permet d'indexer les html au lieu des php dans les moteurs.

    Edit: j'ai changé de place le parametre stop
     
  8. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Merci pour l'argent du beurre 8)

    Je testerai dans le w-end, avant de revenir poster le résultat des courses.
     
  9. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Bonjour. Happé par d'autres projets en cours, j'avais laissé ce sujet en plan, mais pas oublié! :)
    En effet, super le tuyau de redirect permanent:
    Code:
    #RewriteRule ^([0-9]+)-biathlon-handisport-([^/]+)$  /actus.php?stop&num=$1&titre=$2 [L]
    #RewriteCond %{QUERY_STRING} ^num=(.*)&titre=(.*)$
    #RewriteRule actus\.php http://www.monsite.fr/%1-biathlon-handisport-%2? [R=301,L]
    
    Je poste ce up pour ce qui suit, car là, oh stupeur, ça ne marche plus, ça fait à peu près 69 fois que je vérifie la similitude du code, mais NADA, la redirection ne s'effectue pas quand je saisis l'URL dynamique?! :roll:
    Code:
    RewriteRule ^/page,([0-9]+)$              /index.php?stop&page=$1 [L]
    RewriteCond %{QUERY_STRING} ^page=(.*)$
    RewriteRule index\.php http://www.monsite.fr/zenphoto/page,%1? [R=301,L]
    
    WRInautes éclairés, ne me laissez pas dans mon obscure ignorance.
     
  10. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Tu as mis un / de trop au début de ta première règle ...

    Essaie ça:

    Code:
    RewriteRule ^page,([0-9]+)$              /index.php?stop&page=$1 [L]
    RewriteCond %{QUERY_STRING} ^page=(.*)$
    RewriteRule index\.php http://www.monsite.fr/zenphoto/page,%1? [R=301,L]
    
     
  11. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Hello Vap merci pour ta réponse

    Non si j'enlève ce / je me retrouve à un mauvais niveau d'arborescence et je perds tous les liens vers les css et les js.
    La 1e règle fonctionne d'ailleurs bien:

    Code:
    RewriteRule ^/page,([0-9]+)$              /index.php?stop&page=$1 [L] 
    C'est le redirect permanent qui ne marche pas:

    Code:
    RewriteCond %{QUERY_STRING} ^page=(.*)$
    RewriteRule index\.php http://www.monsite.fr/zenphoto/page,%1? [R=301,L] 
    J'ai bien mis le stop de lamogère :) dans la rewriteRule, j'ai vérifié le RewriteCond...

    Pourtant si la condition était vérifiée il devrait se passer qq chose, même mal?
     
  12. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Ta page index.php est à la racine?

    Essaie d'enlever tout sauf ce qui suit pour tester cette règle:

    Code:
    RewriteRule index\.php http://www.monsite.fr/zenphoto/page? [R=301,L]
    
    Si tu entres -http://www.monsite.fr/index.php l'adresse doit etre changée en -http://www.monsite.fr/zenphoto/page

    Ensuite tu met la règle complete:

    Code:
    RewriteCond %{QUERY_STRING} ^page=(.*)$
    RewriteRule index\.php http://www.monsite.fr/zenphoto/page,%1? [R=301,L]
    
    Si tu entres -http://www.monsite.fr/index.php?page=1 l'adresse doit etre changée en -http://www.monsite.fr/zenphoto/page,1
     
  13. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Non, c'est l' index.php du répertoire /zenphoto/ et j'ai un RewriteBase /zenphoto

    pour y voir plus clair voici l'intégralité du .htaccess

    Code:
    # répertoire zenphoto
    
    RewriteEngine On
    RewriteBase /zenphoto
    RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -d [NC]
    RewriteRule ^.*$ - [R,L]
    RewriteRule	^admin/?$	                     zen/admin.php [R,L]
    
    #règle citée dans le topic, seule la 1e ligne fonctionne:
    #RewriteRule ^/page,([0-9]+)$              /index.php?stop&page=$1 [L,QSA]
    #RewriteCond %{QUERY_STRING} ^page=(.*)$
    #RewriteRule /index\.php /page,%1? [R=301,L]
    
    #ou, ce qui revient au même que ci-dessus, ici c'est la 3e ligne qui fonctionne:
    RewriteCond %{QUERY_STRING} ^page=([0-9]+)$
    RewriteRule ^index\.php$ /page,%1? [R=301,L]
    RewriteRule ^/page,([0-9]+)$ /index.php?page=$1&rw [L,QSA]
    
    #idem, seule la 1e ligne fonctionne
    RewriteRule ^([^/]+)/?$                    index.php?stop&album=$1 [L,QSA]
    RewriteCond %{QUERY_STRING} ^album=(.*)$
    RewriteRule index\.php http://www.objectif-vancouver-2010.fr/zenphoto/%1/? [R=301,L]
    
    
    #celle-ci n'a pas encore son R=301
    RewriteRule ^([^/]+),page,([0-9]+)?$      index.php?album=$1&page=$2 [L,QSA] 
    Merci
     
  14. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Tu as mis un RewriteBase /zenphoto ou RewriteBase /zenphoto/ ?

    En principe, les répertoires finissent par / dans apache.

    Si tu n'a pas mis le / à la fin, je comprend qu'il faille que tu le mette au début de chaque règle...

    Le .htaccess que tu as mis est a la racine, ou dans /zenphoto/ ?
     
  15. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    J'ai mis RewriteBase /zenphoto

    Le .htaccess est dans /zenphoto/

    LOgik ton commentaire sur les /

    je mets ça au propre de suite
     
  16. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    OK pour les / inutiles qui trainaient
    A présent donc pour ne prendre que le début du .htaccess jusqu'à la 1e règle qui pose problème on a:

    Code:
    RewriteEngine On
    RewriteBase /zenphoto/
    
    RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -d [NC]
    RewriteRule ^.*$ - [R,L]
    RewriteRule	^admin/?$	          	zen/admin.php [R,L]
    
    RewriteCond %{QUERY_STRING} 		^page=([0-9]+)$
    RewriteRule ^index\.php$ 			page,%1? [R=301,L]
    RewriteRule ^page,([0-9]+)$ 		index.php?page=$1&rw [L,QSA]
    la redirection 301 ne marche tjs pas
    Serait-ce lié aux 1res RewriteCond?
     
  17. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Si je commente les RewriteCond %{REQUEST_FILENAME} , la réécriture et le redirect marchent pour index.php?page= , mais pas pour index.php?album= avec des règles strictement identiques. :roll:

    J'ai aussi testé en php.

    Code:
    $URi = $_SERVER["REQUEST_URI"];
    $motif = "'(/index\.php\?page=)+([0-9]+)'";
    if (preg_match($motif,$URi,$capture)) 	{
    	header("Status: 301 Moved Permanently");
    	header("Location: http://www.objectif-vancouver-2010.fr/zenphoto/page,$capture[2]");
    		exit;
    } 
    Merveilleux bout de code merci http://www.urlrewriting.fr, :) mais même résultat quand j'applique ce code a la var album:

    Code:
    $motif2 = "'(/index\.php\?album=)+(.*)'";
    if (preg_match($motif2,$URi,$capture2)) 	{
    	header("Status: 301 Moved Permanently");
    	header("Location: http://www.objectif-vancouver-2010.fr/zenphoto/$capture2[2]");
    	exit;
    }

    A savoir index.php?page=2 est bien redirigé vers page,2 mais index.php?album=handbike-provence ne renvoie pas vers handbike-provence

    Est-ce que la REGEX (.*) est en cause?

    J'avoue, plus je teste moins je comprends et ça commence à me ficher un mal de crâne sympa l' URL-RW :evil:
     
  18. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    La première règle dit que si ta requete ne correspond ni a un fichier ni a un repertoire existants, alors on ne renvoie rien... Donc elle attrape toutes tes requêtes html.

    Change la en:
    Code:
    RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -d [NC]
    RewriteCond !\.html$
    RewriteRule ^.*$ - [R,L]
    
    Comme ça tu laisse passer les requêtes vers des pages html.
     
  19. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Ta modif me renvoie une erreur 500, d'autre part qu'entends tu par requête html, si je n'ai que des fichiers php? les url réécrites?
     
  20. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Excuses moi, j'ai fait une grosse typo:

    Code:
    RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -d [NC]
    RewriteCond %{REQUEST_FILENAME} !\.html$
    RewriteRule ^.*$ - [R,L] 
    
    Autre chose que j'avais zappé, tu ne met pas d'extension au URL que tu veux réécrire. Ca ne me parait pas une bonne idée du tout, car l'extension indique le type mime du fichier, en l'occurence html.

    Donc, si tu ne veux pas mettre d'extension, le mieux est de supprimer cette règle.
     
  21. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    J'ai suivi tes conseils, j'ai modifié le php pour avoir des url en html, idem pour le .htaccess.

    J'ai donc à présent une réécriture propre avec extension html, qui fonctionne.
    Je suis juste chagriné par une ou deux virgules de trop qui trainent dans ma RW, du style ",page,2.html"
    mais c'est juste un problème d'explode à modifier dans le php, et de règle à affiner conjointement. Je ferai ça ce we.

    Cette partie est donc bien pigée je crois, merci Vap. :D

    Ceci étant j'ai tjs le même pb de redirection 301. J'ai bien le tuyau de webmasterlamogère, avec sa variable bidon à ajouter pour éviter de boucler en rond,
    mais la redirection ne se fait pas, comme si la condition n'était pas remplie?

    Ma prose:

    Code:
    # répertoire zenphoto
    RewriteEngine On
    RewriteBase /zenphoto/
    
    RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -d [NC]
    RewriteCond %{REQUEST_FILENAME} !\.html$
    RewriteRule ^.*$ - [R,L] 
    
    ## RW + 301 => version redirect d'abord
    RewriteCond %{QUERY_STRING} 				^page=([0-9]+)$
    RewriteRule ^index\.php$ 					page,%1\.html? [R=301,L]
    RewriteRule ^page,([0-9]+)\.html$ 			index.php?page=$1&rw [L,QSA]
    
    ## idem pour un autre masque d'URL
    RewriteCond %{QUERY_STRING}					^album=([^/]+)$
    RewriteRule index\.php$ 					%1\.html? [R=301,L]
    RewriteRule ^([^/]+)\.html?$				index.php?album=$1&rw [L,QSA]
    
    ## version RW d'abord
    RewriteRule ^([^/]+)\.html?$               	index.php?stop&album=$1 [L,QSA]
    RewriteCond %{QUERY_STRING} ^album=(.*)$
    RewriteRule index\.php 						%1\.html? [R=301,L]
    
    # RW seules, pas encore mis de redirection
    RewriteRule ^([^/]+),page,([0-9]+)?$      index.php?album=$1&page=$2 [L,QSA]
    RewriteRule ^([^/]+)/image/(thumb|[0-9]{1,4})/([^/\\]+)$    zen/i.php?a=$1&i=$3&s=$2 [L,QSA]
    RewriteRule	^admin/?$	          			zen/admin.php [R,L]
    
    OU la solution php: c'est marrant ce qui suit marche pour un format d'URL mais pas pour l'autre :roll:

    Code:
    <?php 
    	$URi = $_SERVER["REQUEST_URI"];
    	
    	$motif = "'(/index\.php\?page=)+([0-9]+)'";
    	if (preg_match($motif,$URi,$capture)) 	{
    		header("Status: 301 Moved Permanently");
    		header("Location: http://www.objectif-vancouver-2010.fr/zenphoto/page,$capture[2].html");
    		exit;//OK
    	}
    	 
    	$motif2 = "'(/index\.php\?album=)+(.*)'";
    	if (preg_match($motif2,$URi,$capture)) 	{
    		header("Status: 301 Moved Permanently");
    		header("Location: http://www.objectif-vancouver-2010.fr/zenphoto/$capture[2].html");
    		exit;//ne marche pas
    	} 
    ?>
    Any idea? Merci bien. C'est passionnant, mais c'est pointu quand même!
     
  22. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    IL y a encore un problème. Si on prend ces deux règles:
    Code:
    ## RW + 301 => version redirect d'abord
    RewriteCond %{QUERY_STRING}             ^page=([0-9]+)$
    RewriteRule ^index\.php$                page,%1\.html? [R=301,L]
    RewriteRule ^page,([0-9]+)\.html$          index.php?page=$1&rw [L,QSA]
    
    Si tu as une requete page,1.html, la deuxième règle s'applique, tout baigne.

    Si tu as une requête index.php?page=1 , la premièere regle s'applique, donc l'url est réécrite en page,1.html.

    Et ça s'arrête là parce que tu as mis un L a droite, qui veut dire que c'est la dernière règle a applique ('L' veut dire Last).
     
  23. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    Justement pas et c'est bien ça le souci. si j'ai une requête index.php?page=1 , l'url n'est jamais réécrite en page,1.html. :cry:

    (sauf à passer par le php. )
     
  24. raoux
    raoux Nouveau WRInaute
    Inscrit:
    4 Juillet 2006
    Messages:
    30
    J'aime reçus:
    0
    redirect php versus htaccess

    Edit (pour la qualité de ce forum, j'ai préféré effacer qq inepties php du pseudo-débutant que je suis).

    Résultat des courses, c'est tout bon. Via htacces, less is more... j'ai fait un peu de ménage, et je crois avoir compris que l'on doit placer les règles de la plus complexe vers la moins complexe :
    Code:
    # répertoire zenphoto
    RewriteEngine On
    RewriteBase /zenphoto/
    
    RewriteRule	^admin/?$	          				zen/admin.php [R,L]
    
    ### album & page
    RewriteRule ^([^/]+),page,([0-9]+).html?$       index.php?stop&album=$1&page=$2
    RewriteCond %{QUERY_STRING} 	^album=([^/]+)&page=([[:digit:]]+)$
    RewriteRule index\.php 							%1,page,%2\.html? [R=301,L]
    
    ### page
    RewriteRule ^([^/]+)\.html?$               		index.php?stop&page=$1
    RewriteCond %{QUERY_STRING} 	^page=([^/]+)$
    RewriteRule index\.php 							page,%1\.html? [R=301,L]
    
    ### album
    RewriteRule ^([^/]+)\.html?$               		index.php?stop&album=$1
    RewriteCond %{QUERY_STRING} 	^album=([^/]+)$
    RewriteRule index\.php 							%1\.html? [R=301,L]
    
    RewriteRule ^([^/]+)/image/(thumb|[0-9]{1,4})/([^/\\]+)$    zen/i.php?a=$1&i=$3&s=$2 [L,QSA]
    
    En php cela fonctionne aussi, en testant $_GET simplement. Exemple :

    Code:
    if(isset($_GET['album']) && isset($_GET['page'])){
    	header("Status: 301 Moved Permanently", false, 301);
    	header("Location: http://www.objectif-vancouver-2010.fr/zenphoto/".$_GET['album'].",page,".$_GET['page'].".html");
    	exit();
    }
    elseif(preg_match("'(/index\.php\?album=)+(.*)'",$_SERVER["REQUEST_URI"],$capture)) {
    	header("Status: 301 Moved Permanently");
    	header("Location: http://www.objectif-vancouver-2010.fr/zenphoto/$capture[2].html");
    	exit;
    } 
    
    Cela ne me dit pas quelle méthode est à privilégier?

    En tout cas merci à Vap qui m'a permis d'y voir clair. La patience est mère de toutes les vertus! :wink:
     
  25. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Il faudrait mesurer le sperformances, mais je pense qu'il est plus efficace de passer par le fichier .htaccess .
     
Chargement...
Similar Threads - eclairage principes rewriting Forum Date
Pose de liens : Besoin d'aide d'ordre technique et besoin d'éclairage Netlinking, backlinks, liens et redirections 9 Mars 2022
Astuce Éclairage pour un premier audit de site Débuter en référencement 25 Janvier 2021
Eclairage sur google analytics Google Analytics 6 Juillet 2006
Besoin d'éclairage sur la synchro des DC et le role de BigD2 Crawl et indexation Google, sitemaps 28 Avril 2006
[Résolu . Bof !] Besoin d'un eclairage sur Ovh upgrade . Administration d'un site Web 15 Novembre 2005
besoin d'eclairages... !!!! Débuter en référencement 11 Juillet 2004
Les règles et principes de Doubleclick ! AdSense 17 Avril 2007
Le marketing et les principes ... Le café de WebRankInfo 18 Mai 2006