1. ✅ Apprenez une METHODE qui marche pour votre SEO ! Formation à distance avec Olivier Duffez et Fabien Facériès + aide pour prise en charge du financement
    Rejeter la notice

Reécriture pour simuler un répertoire

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par jiojioforever, 10 Janvier 2010.

  1. jiojioforever
    jiojioforever WRInaute occasionnel
    Inscrit:
    23 Novembre 2006
    Messages:
    475
    J'aime reçus:
    0
    Bonjour,
    je suis débutant en urlrewritting.
    j'utilise cette méthode pour mes sites (enfin des choses pas trop pousser) mais la je bloque sur ce cas.

    J'ai dans ma bdd 5 6 catégorie différentes que je voudrais assimiler à des dossiers

    exemple :

    www.monsite.com/categorie1
    www.monsite.com/categorie2
    www.monsite.com/categorie3
    www.monsite.com/categorie4
    ...

    j'avais tenté ce code pour ce cas mais il ne semble pas fonctionner :

    RewriteEngine on
    RewriteRule ^(.+)$ album-photos.php?nom_cat=$1 [L,QSA]

    ____________________

    Etape suivante, quand je suis sur la page en question, je propose différents albums concernant cette catégorie.
    Je voudrais prendre le nom des albums pour faire les urls suivantes :

    www.monsite.com/categorie1/nomalbum1.htm
    www.monsite.com/categorie1/nomalbum2.htm
    www.monsite.com/categorie1/nomalbum3.htm
    ....

    J'avais tenté ce code mais rien...
    RewriteEngine on
    RewriteRule ^(.+)-(.+)+)\.htm$ selection-album.php?nom_alb=$2 [L,QSA]

    Une autre petite question, est ce que j'ai besoin de passer le num_cat et num_alb dans l'url pour récupérer les infos via ma requête ?

    Merci d'avance
     
  2. seebz
    seebz WRInaute impliqué
    Inscrit:
    15 Avril 2007
    Messages:
    728
    J'aime reçus:
    0
    La première règle semble bonne.

    La seconde ne devrait pas plutot être :
    Code:
    RewriteRule ^(.+)/(.+)\.htm$ selection-album.php?nom_alb=$2 [L,QSA]
     
  3. jiojioforever
    jiojioforever WRInaute occasionnel
    Inscrit:
    23 Novembre 2006
    Messages:
    475
    J'aime reçus:
    0
  4. jiojioforever
    jiojioforever WRInaute occasionnel
    Inscrit:
    23 Novembre 2006
    Messages:
    475
    J'aime reçus:
    0
    Pour la deuxième je pars plus sur un truc du genre :

    RewriteRule ^(.+)/(.+)-([0-9]+)\.php$ affichage-album.php?nom_cat=$1&nom_alb=$2&num_alb=$3 [L,QSA]

    mais marche pas non plus ^^
     
  5. jiojioforever
    jiojioforever WRInaute occasionnel
    Inscrit:
    23 Novembre 2006
    Messages:
    475
    J'aime reçus:
    0
    Pour le premier

    www.monsite.com/dossier/categorie

    j'ai essayé

    RewriteEngine on
    RewriteRule ^dossier/(.+)$ album-photos.php?lib_cat=$1 [L,QSA]

    mais rien non plus :(
     
  6. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 665
    J'aime reçus:
    77
    pour le virtuel tu dois mettre dans ton <head> :

    <link rel="canonical" href="http://www.tonsite.com/">

    la réécriture:

    -www.monsite.com/categorie1/nomalbum1.htm

    Code:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/nomalbum([0-9]+)\.htm$  album-photos.php?id=$2 [L]
     
  7. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    Bonsoir à tous,

    Après avoir longuement cherché sur le net, je trouve enfin ce post qui correspond à peu près à ce que je cherche à faire.

    J'aimerai en fait, simuler une arborescence dans la gestion de mon URLRewrinting. La prise en compte de l'arborescence fonctionne, mais lorsque j'accède à une page qui simule un niveau de dossier, les fichiers en include ne sont plus pris en compte (puisqu'il ne se trouve évidement pas dans le faux sous-repertoire), les liens relatifs comportent deux fois le dossier en question, ... .

    Comment faire pour que la fausse arbo ne soit pas prise en compte par les scripts & co ? Est-ce que quelqu'un à déjà rencontré ce cas de figure ?

    Voici mon URLRwritring actuel :

    Code:
    # Interdit le listage d'un répertoire
    IndexIgnore *
    
    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks
    
    # Activation du module de réécriture d'URL :
    RewriteEngine on
    
    #Règles de réécriture
    RewriteRule ^accueil.html$   ?p=5 [L]
    RewriteRule ^contact.html$   ?p=8 [L]
    RewriteRule ^produits.html$   ?p=11 [L]
    RewriteRule ^produits/page1.html$   ?sp=4 [L]
    RewriteRule ^produits/page2.html$   ?sp=5 [L]
    RewriteRule ^produits/page3.html$   ?sp=6 [L]
    
    Merci à tous,
    Thomas.

    EDIT :
    Après avoir chercher davantage, j'ai lu quelquepart que sur un mutualisé OVH, il fallait forcément préciser les URL destinations en absolue, mon .htaccess est donc maintenant :

    Code:
    # Interdit le listage d'un répertoire
    IndexIgnore *
    
    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks
    
    # Activation du module de réécriture d'URL :
    RewriteEngine on
    
    #Règles de réécriture
    RewriteRule ^accueil\.html$   http://www.monsite.fr/pilote/index.php?p=5 [L]
    RewriteRule ^contact\.html$   http://www.monsite.fr/pilote/index.php?p=8 [L]
    RewriteRule ^produits\.html$   http://www.monsite.fr/pilote/index.php?p=11 [L]
    RewriteRule ^produits/page1\.html$   http://www.monsite.fr/pilote/index.php?sp=4 [L]
    RewriteRule ^produits/page2\.html$   http://www.monsite.fr/pilote/index.php?sp=5 [L]
    RewriteRule ^produits/page3\.html$   http://www.monsite.fr/pilote/index.php?sp=6 [L]
    
    Les liens sont rétablis, mais soucis : l'url affichée dans le navigateur correspond à celle censée être masquée, c'est à dire :
    http://www.monsite.fr/pilote/index.php?p=5

    Une idée ?

    Merci :eek:
     
  8. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    KOogar, peux-tu expliquer ton code en détail, stp ?

    Merci :D
     
  9. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 665
    J'aime reçus:
    77
    :D
    Partir du principe que les regles ne changent pas de l'ordinaire, il faut écrire ses regles sans changer ses habitudes. Seul 2 points sont a voir pour que la simulation fonctionne normalement. Le premier est d'ajouter une condition supplémentaire dans le fichier .htaccess et la seconde est d'ajouter un tag supplémentaire dans le <head> des documents html, voyons le détail:

    1° Pour qu'une règle de réécriture soit appliquée si la requête ne correspond pas a un répertoire existant (ce qui est notre cas) il faut ajouter avant la règle de réécriture la condition suivante :
    RewriteCond %{REQUEST_FILENAME} !-d

    2° Il faut aussi ajouter dans le <head> la ligne suivante en mettant l'url du site
    <link rel="canonical" href="http://www.tonsite.com/">

    en mettant la racine en url canonicale, le slash "/" devient la racine. il faut maintenant appeler les fichiers sans oublier d'ajouter le "/" slash : <img scr="/images/images.jpg">
     
  10. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    En appliquant cette méthode, j'obtiens un comportement vraiment bizarre.

    J'ai ajouté les conditions pour le rewrite, ajouter la link canonical (incluant un sous-dossier, dans mon cas : "http://www.monsites.fr/dossier/").

    Si je mets un / devant mes URLs relative, il m'affiche le contenu d'une arborescence en dessous. Si je ne mets pas le / il m'affiche le bon contenu mais sans les liens vers les CCS et les fichiers en include/require sont introuvable. Il prend toujours le faux dossier comme un vrai dossier.

    Une idée ? :(

    Merci.
    Thomas.
     
  11. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 665
    J'aime reçus:
    77
    dans ce cas il faut que le dossier existe physiquement
    <link rel="canonical" href="http://www.tonsite.com/dossier/">

    si il s'agit d'un dossier virtuel il ne faut rien mettre
    <link rel="canonical" href="http://www.tonsite.com/">

    et pour le style
    <link href="/style.css" rel="stylesheet" type="text/css" />
     
  12. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    Le dossier précisé dans le canonical existe vraiment, c'est dans celui-ci qu'est mon site, en fait.

    si je mets un / devant les styles,
    <link href="/css/style.css" rel="stylesheet" type="text/css" />
    il tente (et n'y parvient pas) de trouver ma css à cette adresse :
    http://www.monsite.fr/css/style.css

    Or, ma css est à cette adresse :
    http://www.monsite.fr/dossier/css/style.css

    Il ne prend pas en compte le dossier que je lui donne dans le canonical :
    <link rel="canonical" href="http://www.monsite.fr/dossier/">


    En tout cas, merci pour ton aide. J'aime beaucoup ta façon de préciser le code à chaque variante... :D
     
  13. jiojioforever
    jiojioforever WRInaute occasionnel
    Inscrit:
    23 Novembre 2006
    Messages:
    475
    J'aime reçus:
    0
    Je ne sais pas si vous connaissez le site le site : http://www.generateit.net/mod-rewrite/
    il permet de générer les urlrewritting

    il me propose de mettre mon url dynamique : http://www.domaine.com/photo-vacance/selection-categorie.php?nom_cat=ahaha
    et après plusieurs configs je mets comme je le souhaitais http://www.domaine.com/photo-vacance/ahaha

    Le dossier "photo-vacance" existe bien...

    voici ce qu'il me propose... maissss ça ne marche pas :

    RewriteEngine On
    RewriteRule ^photo-vacance/([^/]*)$ /photo-vacance/selection-categorie.php?nom_cat=$1 [L]

    j'ai un ami qui me proposer de partir sur ça : RewriteRule ^/(.+)/(.+)[/]?$ selection-categorie.php?nom_cat=$2 [L,QSA]
     
  14. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    Je pense que c'est le même soucis que le miens, un soucis de répertoire virtuel, ici le 1er photo-vacance dans ce que te propose le site.

    Essai de mettre la fameuse condition citée plus haut pour voir si ça marche. Bonne chance ;)
     
  15. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 665
    J'aime reçus:
    77
    tu dois te planter quelque part, je n'avais jamais utiliser de rep physique pour du virtuel, j'ai fait un test et come attendue voici le résultat:

    "test" est un répertoire physique
    "rep1" "rep2" "rep3" sont des virtuels

    la regle
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/(.+)/(.+)/contact\.html$ /test/contact.php [L]

    le header
    <link rel="canonical" href="http://www.site.com/test/">
    <link href="/style.css" rel="stylesheet" type="text/css" />

    LE TEST :
    -http://www.annevalerie.com/test/rep1/rep2/rep3/contact.html
     
  16. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0

    Lorsque tu précises "/test/" dans ta règle, j'ai l'impression que ton .htaccess n'est pas DANS le répertoire physique, mais un niveau plus haut. Or dans mon cas, le .htaccess est dans le repertoire physique (au même niveau que index.php)


    Voici mon arborescence :
    Code:
        www/
        |- pilote/
           |-index.php
           |-.htaccess (celui que j'édite)
           |-css/
              |-style.css
           |-includes/
              |- ...
    Est-ce que ce que tu écris correspond aussi à mon cas ?

    A savoir que j'ai aussi des pages qui ont besoin des même CSS et autre fichiers en include mais qui elles ne doivent pas simuler de dossier. On peut faire les deux en même temps ?

    Encore merci,
    Thomas.
     
  17. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 665
    J'aime reçus:
    77
    j'ai placer le .htaccess dans le repertoire physique "test" sans modifier la réécriture et la page s'affiche normalement

    Code:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/(.+)/(.+)/contact\.html$  /test/contact.php [L]
    le TEST:
    -http://www.annevalerie.com/test/rep_virtuel/rep_virtuel/rep_virtuel/contact.html
     
  18. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    Si je mets / dans mes urls relatives, ça ne fonctionne pas.

    LINK :
    <link rel="canonical" href="http://localhost/redirection/" />

    LIEN RELATIF :
    <a href="/page1.html">Page 1</a>
    Lorsque je clic, il m'envoit vers http://localhost/page1.html
    <a href="/dossier/spage1.html">Sous-page 1</a>
    Lorsque je clic, il m'envoit vers http://localhost/dossier/spage1.html au lieu de http://localhost/redirection/dossier/spage1.html

    De même pour les inclusions :
    <link href="/css/reset.css" rel="stylesheet" type="text/css" />
    Il va chercher : http://localhost/css/reset.css et non http://localhost/redirection/css/reset.css

    HTACCESS:
    Code:
    # Interdit le listage d'un répertoire
    IndexIgnore *
    
    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks
    
    # Activation du module de réécriture d'URL :
    RewriteEngine on
    
    #Règles de réécriture
    RewriteRule ^page1\.html$   /redirection/index.php?p=1 [L]
    RewriteRule ^page2\.html$   /redirection/index.php?p=2 [L]
    RewriteRule ^page3\.html$   /redirection/index.php?p=3 [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/spage1\.html$   /redirection/index.php?sp=1 [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/spage2\.html$   /redirection/index.php?sp=2 [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/spage3\.html$   /redirection/index.php?sp=3 [L]
    
    Bizarre... c'est normal ? :s
     
  19. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 665
    J'aime reçus:
    77
    Quand tu clic sur <a href="/dossier/spage1.html">Sous-page 1</a> il t'envoit sur http://localhost/dossier/spage1.html
    ben tout va bien !!! Chez moi c'est qu'il y a de plus normal :) je vois pas en quoi ca te pose problème;

    pour info tu peux reduire tes regles comme ceci
    Code:
    RewriteRule ^page([0-9]+)\.html$   /redirection/index.php?p=$1  [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/spage([0-9]+)\.html$   /redirection/index.php?sp=$2 [L]
    tu veux faire quoi au juste parceque c'est pas kler ton problème.. rien compris a tes redirections, et je comprend de moins en moins ton probleme :? surtout que je t'ai bardé d'exemples valident.
     
  20. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    Bon, je vais essayer de repartir de zéro pour t'expliquer tout cela clairement. Je suis en train de créer un CMS à 2 niveaux de pages. Les pages (qui ne nécessite pas de simuler un dossier) et les sous-pages (qui nécessite de simuler un sous-dossier dont le nom est celui de sa page-mère).

    Par exemple, si j'ai une page "Produits" qui contient "Voitures", "Moto" et "Camion", j'aimerai qu'elle s'affichent avec l'url :
    http://www.monsite.fr/produits/voiture.html, http://www.monsite.fr/produits/moto.html, ... le répertoire "produits" n'existe PAS physiquement. Je dois donc le simuler. A savoir que les pages n'existe pas non plus, la redirection me sert à remplacer "camion.html" en "index.php?p=2", mon script faisant le nécessaire pour lire le contenu concerné en BDD et l'afficher dans la page (à partir d'une UNIQUE page "index.php" présente à la racine).

    Grâce à ton aide, j'y suis parvenu, j'arrive a simuler un dossier en affichant les bonnes données dans la page & co SAUF que :
    > S'il s'agit d'une page, tout est OK,
    > S'il s'agit d'une sous-page, le contenu (BDD) est OK mais les includes que je fais dans le fichier index.php ne sont valide que pour les pages ne simulant pas d'arborescence.

    Explication : Étant donné le faux dossier, le serveur va chercher les fichiers à inclure relativement au faux dossier, or celui-ci n'existe pas. J'ai donc rajouté un slash devant tous les inclusions (comme conseillé), nouveau soucis :
    > Que ce soit pour une page ou une sous-page, le serveur ne va plus chercher les fichiers à la racine du site, mais encore un niveau au-dessous :
    Au lieu de http://localhost/redirection/include/fichierainclure.php
    Il va à http://localhost/include/fichierainclure.php (et ce, qquesoit le niveau)

    Je ne comprends pas pourquoi il rebrousse d'un niveau. J'ai pourtant bien mis le canonical : http://localhost/redirection/
    J'imagine que c'est à cela que ça sert.

    J'espère que j'ai été plus clair. Sinon, je suis désolé et tenterait de me débrouiller avec tout l'aide que tu m'as déjà apporté.

    PS : Pour la simplification des règles, je ne peux pas, mes pages sont nommées dans le genre :
    produitlegervoiture.html, produitmachinchose.html, blablabla, donc à chaque nom correspond un ID de page en BDD. :D Mais merci :)

    PS2 : J'arrive à résoudre mon problème en enlevant le canonical, en supprimant le slash au début des urls relatives et en ajoutant <base href="http://localhost/redirection/"> mais je doute fortement que ça soit la solution.


    Encore merci à toi, KOogar... c'est la 1ère fois que je demande de l'aide sur le net et cela est fort appréciable de voir que certains aide comme si c'était leur travail.
     
  21. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 665
    J'aime reçus:
    77
    Super tu avances :D

    <base href="http://localhost/redirection/">
    est une solution

    avec la fonction dirname si tu restes en canonique, tu dois sans probleme retrouver le bon chemin de tes fichiers:
    http://php.net/manual/en/function.dirname.php

    Pour l'utiliser :
    Code:
    <?php 
    include(dirname(__FILE__) . '/include/fichierainclure.php'); 
    ?>
     
  22. thomasg
    thomasg Nouveau WRInaute
    Inscrit:
    11 Janvier 2010
    Messages:
    9
    J'aime reçus:
    0
    Juste pour dire merci, une dernière fois.

    J'admire la patience de ceux qui prenne le temps de lire les messages au cas par cas pour y répondre.

    Ton aide m'a apporté, KOogar, c'est la 1ère fois que je faisais d'la redirection.

    Pour ma part, le soucis est résolu avec <base ...>, pour les suivants :wink: ça marche très bien. Je sais pas si j'dois mettre [Résolu] ou non dans le sujet, étant donné que j'suis pas l'auteur du 1er post.

    Bien à vous tous,
    Thomas.
     
Chargement...
Similar Threads - Reécriture simuler répertoire Forum Date
Comment faire une redirection des URL en + de la réécriture d'URL ? URL Rewriting et .htaccess 13 Septembre 2020
Réécriture d'articles, est-ce une bonne idée de couper ses articles? Rédaction web et référencement 25 Mai 2020
Réécriture et robots.txt Débuter en référencement 10 Octobre 2019
Réécriture HTTPS / WWW / redirect, etc ... URL Rewriting et .htaccess 10 Juin 2019
Réecriture simple qui ne fonctionne pas URL Rewriting et .htaccess 20 Février 2019
Faire une redirection 301 et une réécriture en même temps (.htaccess) URL Rewriting et .htaccess 16 Décembre 2018
Réécriture url et htaccess URL Rewriting et .htaccess 3 Octobre 2018
Réecriture url sur Shopify e-commerce 15 Juin 2017
Réécriture URL supprimer home/annugrbz/public_html URL Rewriting et .htaccess 24 Novembre 2016
Apache => Ngnix - Réécriture RewriteCond URL Rewriting et .htaccess 1 Février 2016