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 : url rewriting et redirection


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Par défaut htaccess : url rewriting et redirection
    bonjour,
    voici grosso modo (en simplifié) le code mon htaccess :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 1) je fais mes redirection de pages car suite a des chagement de structure de ma BDD, les id de mes professeurs ont changées
    Redirect 301 /professeur-monique-54 https://monsite.com/professeur-monique-423
    Redirect 301 /professeur-florence-66 https://monsite.com/professeur-florence-424
    Redirect 301 /professeur-muriel-70 https://monsite.com/professeur-muriel-425
     
     
    # 2) je fais mes regles d'url rewriting qui geres ces pages "professeur"
    Options +FollowSymlinks
    RewriteEngine on
     
    RewriteRule ^professeur-([a-z0-9\-]+)-([0-9]+)$ professeur.php?idProf=$2 [L]
    # ex : cette url : https://monsite.com/professeur-floria-87
    # sera réécrite comme ci : https://monsite.com/professeur.php?idProf=87

    mon problème est que quand je tape ca dans l'url :
    https://monsite.com/professeur-monique-54
    ca m'affiche cette url : https://monsite.com/professeur-monique-423?idProf=54
    alors que je voulais que ca affiche ceci : https://monsite.com/professeur-monique-423

    vouyez-vous mon pb (il me fais un mix des 2 url )?
    comment résoudre celui-ci ?
    doi-je inverser l'ordre de mes réécritures avec mes redirections ?
    merci pour tout,
    et excellente année à tous

  2. #2
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387
    Par défaut
    Bonjour,

    suivant la doc https://httpd.apache.org/docs/2.4/re....html#redirect

    ...lorsque des directives Redirect et RewriteRule se trouvent dans la même portée, les directives RewriteRule sont exécutées en premier, sans tenir compte de leur ordre d'apparition dans le fichier de configuration.
    ça se tente d'inverser l'ordre des déclarations, mais visiblement, ce ne sera pas suffisant.

    Vous pourriez transformer ces redirections en ré-écriture d'url adjointe des drapeaux [R=301,L],
    il faudra prendre garde à les déclarer
    en amont de la réécriture plus générale
    ^professeur-([a-z0-9\-]+)-([0-9]+)$ professeur.php?idProf=$2 [L]

    Vous auriez alors quelque chose ressemblant à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RewriteEngine on
    # redirections
    RewriteRule ^/professeur-muriel-70$ /professeur-muriel-425 [R=301,L]
    # ...
    # ré écriture
    RewriteRule ^professeur-([a-z0-9\-]+)-([0-9]+)$ professeur.php?idProf=$2 [L]
    C'est non testé, mais c'est l'idée.

    https://httpd.apache.org/docs/2.4/re...gs.html#flag_r
    https://httpd.apache.org/docs/2.4/re...gs.html#flag_l

    Bonne journée.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Par défaut
    Bonjour et merci beaucoup pour votre aide
    je reponds que maintenant car je me réattaque a ce probleme...

    une premiere question car j'essai de bien tout comprendre :
    1) vous avez citée cette phrase
    ...lorsque des directives Redirect et RewriteRule se trouvent dans la même portée, les directives RewriteRule sont exécutées en premier, sans tenir compte de leur ordre d'apparition dans le fichier de configuration.

    ceci veux dire que le si j'ai des Redirect et des RewriteRule dans mon fichiers les RewriteRule sont de toute facon lue en premier ?
    et qu'est qu'une portée ? une regle ou un fichier ?

    2) vous dites :
    Citation Envoyé par unanonyme Voir le message
    il faudra prendre garde à les déclarer en amont de la réécriture plus générale
    que cela veux dire faire une declaration de mes regles (général ou globale) plus haut dans dans le fichier ?

    donc si j'ai compris, j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    RewriteEngine on
    # redirections
     
    #### Pages profs - règle générale ####
    RewriteRule ^professeur-([a-z0-9\-]+)-([0-9]+)$ professeur.php?idProf=$2 [L]
     
    RewriteRule ^/professeur-muriel-70$ /professeur-muriel-425 [R=301,L]
    la en effet je n'ai plus ce mélange bizarre en URL :
    https://monsite.com/professeur-monique-425?idProf=70

    mais maintenant j'ai ceci en URL (ca ne transforme rien):
    https://monsite.com/professeur-muriel-70
    alors que je voudrais cela :
    https://monsite.com/professeur-muriel-425

    merci beaucoup pour votre aide

  4. #4
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387
    Par défaut
    Bonjour,

    Il n'y a pas de définitions claire et explicite de la portée (scope)
    dans la documentation du serveur web httpd.

    Il peut être fait mention de portée, conteneurs, ou de contexte.

    Ce qui s'y rapproche le plus est la définition du contexte.

    Le conteneur à ceci de de spécifique qu'il peut
    être évalué à chaque requête ou à chaque démarrage.

    https://httpd.apache.org/docs/2.4/fr/sections.html

    En l'occurrence vous avez probablement définit un virtualhost,
    c'est de ce scope dont il est question.

    Dans
    Vous pourriez transformer ces redirections en ré-écriture d'url adjointe des drapeaux [R=301,L],
    il faudra prendre garde à les déclarer
    en amont de la réécriture plus générale
    Ce dont il faut prendre garde,
    c'est de déclarer les nouvelles ré-écriture d'url, anciennement redirections,
    avant, au dessus, en amont, de la ré-écriture plus générale
    RewriteRule ^professeur-([a-z0-9\-]+)-([0-9]+)$ professeur.php?idProf=$2 [L]
    Car si l'ordre d'exécution de directives appartenant à différents module
    n'est pas évident à déceler sans une connaissance approfondie
    du fonctionnement interne du serveur, ou après avoir lu la documentation,
    il très clairement définit dans quelle ordre sont exécutées les rè-écritures.

    Cela est d'autant plus important car il permet de justifier de l'utilisation du drapeau [L], qui signifie last, dernier.
    Ce drapeau permet donc de stopper le processus cumulatif de règles successive.

    https://httpd.apache.org/docs/2.4/mo...ml#rewriterule

    L'ordre dans lequel ces règles sont définies est important - il s'agit de l'ordre dans lequel les règles seront appliquées au cours du processus de réécriture.
    Ainsi, dans votre exemple, vous n'avez plus de query string
    car il n'y a plus de chevauchements
    des directives provenant de modules différents.

    Cependant, ça ne fonctionne plus car l'ordre de définition de vos ré écritures
    ne correspond pas à votre intention.


    Bonne journée.

Discussions similaires

  1. [Htaccess] URL rewriting
    Par Neuromancien2 dans le forum Apache
    Réponses: 17
    Dernier message: 29/08/2008, 09h35
  2. Réponses: 2
    Dernier message: 29/11/2007, 18h41
  3. Si vous avez des questions sur Apache, HTAccess, URL rewriting avec Apache, etc
    Par Marc Lussac dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 28/08/2007, 19h09
  4. [HTAccess] URL rewriting
    Par actarus44 dans le forum Apache
    Réponses: 4
    Dernier message: 13/07/2005, 11h41
  5. .htaccess - url rewriting, besoin de conseils
    Par giminik dans le forum Apache
    Réponses: 2
    Dernier message: 25/04/2005, 20h18

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