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, j'y suis presque !


Sujet :

Apache

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Points : 15
    Points
    15
    Par défaut URL rewriting, j'y suis presque !
    Bonjour,

    Dans mon htaccess, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^demande-([0-9]+).html$ index.php?page=demande_fiche.html&demande=$1 [L]
    Quand je tappe : "www.site.com/demande_35.html" ca maffiche bien la page "www.site.com/index.php?page=demande_fiche.html&demande=35".

    Je souhaite que quand on tappe "www.site.com/index.php?page=demande_fiche.html&demande=35" ça traduit directement en "www.site.com/demande_35.html" dans la barre d'adresse.

    Merci pour votre aide, j'y suis presque!

  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
    Pas sûr que tu y sois presque, ce n'est pas particulièrement simple. Il faut arriver à distinguer l'URL /index.php?page=demande_fiche.html&demande=35 provenant d'une réécriture (ta règle) et celle provenant d'un accès direct par le navigateur. Une technique classique est l'ajout d'un paramètre d'URL bidon qui sert à faire la distinction entre les 2 cas. Ce paramètre serait présent uniquement quand tu réécris avec ta règle. La difficulté principale va être le fait de jouer avec le fait que l'ordre des paramètres dans l'URL n'est pas garanti : ça peut être page=...&demande=... ou demande=...&page=..., sans compter le paramètre bidon. Dans ton cas, pour gérer cette combinatoire, je propose de passer par un script PHP qui te permettra d'accéder à tes paramètres d'URL sans tenir compte de l'ordre.

    .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    RewriteRule ^demande-([0-9]+).html$ index.php?page=demande_fiche.html&demande=$1&bidon=xx [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} page=
    RewriteCond %{QUERY_STRING} demande=demande_fiche\.html
    RewriteRule ^index\.php$ redirect_demande.php [L]
    redirect_demande.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    header("Location: http://.../demande_".$_GET["page"].".html");
    ?>
    Ca pourrait être rendu plus élégant en s'assurant dans le code PHP que les paramètres d'URL page et demande sont bien positionnés et avec des valeurs correctes mais bon.

    Comme quoi, tu y es presque !

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Mon but était de ne rien mettre dans mes pages php. je souhaite tout mettre dans mon htaccess.

    Est-ce possible ?

    Merci.

  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
    Tu n'as rien à mettre dans tes pages PHP, tu as juste une nouvelle page PHP à créer. Mais si ce n'est pas acceptable, oui, c'est possible de faire tout en .htaccess mais c'est très compliqué de gérer l'ordre et l'exactitude des paramètres d'URL "page" et "demande". C'est vraiment ce que tu veux ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Oui, je voudrais tout mettre dans le htaccess.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^demande-([0-9]+).html$ index.php?page=demande_fiche.html&demande=$1 [L,R=301]
    Avec l'instruction ci-dessus, ça redirige systématiquement dans la barre d'adresse la page "http://www.site.fr/demande-26.html" vers "http://www.site.fr/index.php?page=demande_fiche.html&demande=26".

    Je souhaite faire l'inverse c'est à dire rediriger automatiquement dans la barre d'adresse la page "http://www.site.fr/index.php?page=demande_fiche.html&demande=26" vers la page "http://www.site.fr/demande-26.html".

    Comment faire en touchant uniquement le htaccess ?

    Merci.

  6. #6
    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
    Et bien il faut faire comme j'ai dit utiliser un paramètre d'URL bidon qui sert à faire la distinction entre une URL index.php?page=... taper directement dans la barre d'adresse d'un navigateur et une URL index.php?page=... obtenue par réécriture Apache. La difficulté principale réside dans le fait d'identifier ces URL tapées directement par un utilisateur car on peut taper les paramètres d'URL dans n'importe quel ordre.

    Bref, à l'inspiration, pour gérer tous les cas qui se présentent, ça donnerait ça. Y a sûrement moyen d'avoir que 2 ou 4 règles mais mes compétences en expressions régulières ne savent pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    RewriteRule ^demande-([0-9]+).html$ index.php?page=demande_fiche.html&demande=$1&bidon=xx [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^page=demande_fiche\.html&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^page=demande_fiche\.html&.*&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &page=demande_fiche\.html&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &page=demande_fiche\.html&.*&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^demande=([^&]*)&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^demande=([^&]*)&.*&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &demande=([^&]*)&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &demande=([^&]*)&.*&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Avec ce passage dans mon fichier .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteRule ^demande-([0-9]+).html$ index.php?page=demande_fiche.html&demande=$1 [L]
    RewriteCond %{QUERY_STRING} ^page=demande_fiche\.html&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [L]
    J'obtiens l'erreur suivante :
    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, webadmin@kundenserver.de and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.

    Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
    Une idée ?

    Merci.

  8. #8
    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
    Oui, ça part en boucle. Il faut savoir qu'Apache n'arrête pas tout de suite une réécriture : il exécute les règles jusqu'à ce qu'il obtienne une URL qui n'est plus réécrite, ce qui n'est pas ton cas : index.php?page=demande_fiche.html&demande=... devient, avec les lignes 2 et 3 l'URL demande-....html qui redevient index.php?page=demande_fiche.html&demande=... avec la première ligne et ainsi de suite.

    Il faut par exemple ajouter une condition à la première règle pour arrêter définitivement la réécriture ou bien faire une redirection du navigateur, ce que j'ai oublié de faire dans ma proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    RewriteRule ^demande-([0-9]+).html$ index.php?page=demande_fiche.html&demande=$1&bidon=xx [L]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^page=demande_fiche\.html&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [R=301]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^page=demande_fiche\.html&.*&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [R=301]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &page=demande_fiche\.html&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [R=301]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &page=demande_fiche\.html&.*&demande=([^&]*)
    RewriteRule ^index\.php$ demande-%1.html [R=301]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^demande=([^&]*)&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [R=301]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} ^demande=([^&]*)&.*&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [R=301]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &demande=([^&]*)&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [R=301]
     
    RewriteCond %{QUERY_STRING} !bidon=xx
    RewriteCond %{QUERY_STRING} &demande=([^&]*)&.*&page=demande_fiche\.html
    RewriteRule ^index\.php$ demande-%1.html [R=301]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

Discussions similaires

  1. URL rewriting : je suis perdu !
    Par nicolas2603 dans le forum Apache
    Réponses: 11
    Dernier message: 23/04/2010, 01h26
  2. [Débutant]infos ds session sans cookie ? url rewriting ?
    Par Satanas_et_diabolo dans le forum ASP
    Réponses: 8
    Dernier message: 10/10/2006, 17h13
  3. .htaccess - url rewriting, besoin de conseils
    Par giminik dans le forum Apache
    Réponses: 2
    Dernier message: 25/04/2005, 20h18
  4. Activer l'url rewriting
    Par Otaugames dans le forum Apache
    Réponses: 2
    Dernier message: 09/03/2005, 14h58
  5. Url Rewriting / htaccess
    Par bisi dans le forum Apache
    Réponses: 4
    Dernier message: 25/07/2004, 22h12

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