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 :

[URL rewriting] besoin d'un éclaircissement sur la relation entre variables PHP et mod_rewrite


Sujet :

Apache

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 52
    Points : 45
    Points
    45
    Par défaut [URL rewriting] besoin d'un éclaircissement sur la relation entre variables PHP et mod_rewrite
    Bonjour,

    J'utilise la fonction url-rewriting pour renommer les fichiers simples : exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^resultats-10m-2009-2010\.pdf$ ./resultats/2009_2010/resultats_10m_2009_2010.pdf [L]
    Et cela fonctionne très bien.

    La ou je n'arrive pas du tout c'est pour passer des variables ex:
    j'ai crée cette règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^resultats-([0-9]+)\.html$ ./resultats_chpts/resultats_chpts.php?id_type_chpt=$1 [L]
    cela ne fonctionne pas et pour moi c'est normal car comment .htaccess va savoir que $1 correspond à la variable qui se nomme $idanneetypecompet et qui se trouve dans le fichier .php dans lequel je renvoi le lien resultats-([0-9]+).html ??

    Il y a quelque chose que je ne comprends pas !

    Merci par avance de votre aide

  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
    Citation Envoyé par pounie Voir le message
    cela ne fonctionne pas et pour moi c'est normal car comment .htaccess va savoir que $1 correspond à la variable qui se nomme $idanneetypecompet et qui se trouve dans le fichier .php dans lequel je renvoi le lien resultats-([0-9]+).html ??
    Ce qui est certain c'est que mod_rewrite n'est pas au courant de ce qu'il peut se passer dans les fichiers PHP. mod_rewrite va uniquement travailler à partir de l'URL demandée par le navigateur lors d'un clic et de quelques autres informations liées à la requête et les variables d'environnement Apache. Ce qui veut dire que pour qu'une règle du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^resultats-([0-9]+)\.html$ ./resultats_chpts/resultats_chpts.php?id_type_chpt=$1 [L]
    soit exécutée, il faut que l'internaute ait cliqué sur un lien "/resultats-123.html" par exemple, et dans ce cas, vu que dans le premier membre du RewriteRule, le premier groupe de parenthèses encadre des chiffres, le $1 vaut ces chiffres qui sont 123 dans mon exemple. Donc "/resultats-123.html" sera interprété comme étant /resultats_chpts/resultats_chpts.php?id_type_chpt=123 par Apache. Après, c'est tout ce que je peux dire, je ne sais pas à quoi sert ta variable PHP $idanneetypecompet et ce que tu veux faire avec. Mais toujours est-il que mod_rewrite ne sera exécuté que sur requête de l'utilisateur et avant l'exécution du PHP, jamais pendant ou après.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 52
    Points : 45
    Points
    45
    Par défaut
    Bonjour Mac,

    Ok ta réponse conforte ce que je pensais.
    pour la variable $idanneetypecompet elle prend différente valeur et effectivement Apache ne peut pas deviner la valeur que l'internaute va choisir !

    Pour mon cas le visiteur a un choix entre plusieurs pages issus de requête vers une base de données : exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a href='index.php?page=200&;&nom_type=$anneetypecompet&;id_type_chpt=$idanneetypecompet&annee1=$anneecompet1
    selon les valeurs des variables cela va bien entendu afficher des pages différentes,
    par exemple id_type_chpt peut prendre les valeurs :1 ou 2 ou 3, etc ...selon le clic de l'internaute..
    Ce que je ne comprends pas c'est dans quelle page mettre le résultats du RewriteRule ?
    Si tu désires voir la forme de la page voilà l'adresse en question :
    http://www.liguepicardiedetir.com/re...-picardie.html et apparaît la liste des choix avec des adresses pas beaucoup mémorisable ...

    Merci pour l'aide et bon Noël

  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
    Je n'ai pas compris la question Ce qu'il faut c'est qu'une page HTML quelconque contienne un lien <a href="/resultats-123.html">. C'est le code HTML de la page (donc éventuellement l'exécution du code PHP) qui doit contenir (ou renvoyer) ce lien. Comme je disais, Apache n'ira pas exécuter mod_rewrite après génération du code HTML de la page, donc ce n'est pas Apache qui ira mettre le lien qui va bien. Je le redis encore : il faut que ton code PHP ou HTML renvoie au navigateur le bon lien /resultats-123.html.

    Dans le code PHP que tu donnes, tu as 3 variables "dynamiques" (nom_type, id_type_chpt et annee1). Il faut donc, si tu veux une jolie URL en .html, que cette jolie URL contienne les valeurs de ces variables à des places bien précises. Admettons par exemple, que tu dises que les jolies URL auront la forme suivante : /resultats-<valeur de nom_type>-<valeur de id_type_chpt>-<valeur de annee1>.html. Dans ce cas, le code PHP sera le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="/resultats-' . $anneetypecompet . '-' . $idanneetypecompet . '-' . $anneecompet1 . '.html">';
    et le .htaccess sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^resultats-(.*)-(.*)-(.*)\.html index.php?page=200&nom_type=$1&id_type_chpt=$2&annee1=$3 [L]
    à supposer que tes différentes variables ne contiennent pas de -.

    Maintenant, je ne sais pas si je réponds à la question vu que je ne l'ai pas comprise

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 52
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Maintenant, je ne sais pas si je réponds à la question vu que je ne l'ai pas comprise
    Bonjour,

    Si, tu réponds très bien à ma question par le fait que le .htacces ne vas pas du tout résoudre des recherches de variables.

    Il faut maintenant que je réfléchisse à une nouvelle organisation de mes pages pour que des URL ''lisibles'' apparaissent après résolution des variables.

    Merci pour ton aide

Discussions similaires

  1. [URL Rewriting] besoin d'aide
    Par Couscouss sensei dans le forum Apache
    Réponses: 8
    Dernier message: 03/07/2008, 11h51
  2. [URL Rewriting] Besoin d'aide pour règle un peu longue
    Par yvon_huynh dans le forum Apache
    Réponses: 5
    Dernier message: 23/06/2008, 13h12
  3. Réponses: 7
    Dernier message: 19/03/2008, 17h07
  4. .htaccess - url rewriting, besoin de conseils
    Par giminik dans le forum Apache
    Réponses: 2
    Dernier message: 25/04/2005, 21h18

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