réécrire des urls /index.php?page=$valeur en /valeur

Discussion dans 'URL Rewriting et .htaccess' créé par hiladure, 26 Janvier 2007.

  1. hiladure
    hiladure Nouveau WRInaute
    Inscrit:
    26 Janvier 2007
    Messages:
    1
    J'aime reçus:
    0
    Bonjour,

    J'ai un site avec des URLs du type suivant :
    http://www.example.com/index.php?page=accueil
    J'ai défini des liens du type http://www.example.com/accueil
    Après avoir fait pointer mes href sur le pattern de mes urls fictives, et après avoir bien vérifié toute la configuration, la nouvelle adresse (dynamique) s'affiche dans le navigateur...
    Aucun intéret de changer mes liens puisque le résultat est le même dans la barre d'adresse !
    En revanche, j'ai pu arriver, via l'utilisation de regex, à supprimer quelques éléments pour avoir des URLs du type http://www.example.com/?=accueil
    Mais il semblerait que les caractères ? et = ne sont pas gérés par le mod_rewrite d'apache, dans l'adresse à réécrire.
    J'ai bien essayé de les masquer comme pour les regex pcre, mais pas de résultat.

    Pourriez-vous m'aider à avoir des URLs du type http://www.example.com/accueil,
    càd avec le paramètre de la variable dans la barre d'adresse...

    Les infos :
    adresse fictive
    http://www.example.com/accueil
    adresse réelle
    http://www.example.com/index.php?page=accueil

    Le fichier .htaccess :
    Code:
    RewriteEngine On
    RewriteRule ^(accueil|toto|tata|tonton )$ /index.php?page=$1 [L]
    #qui permet d'afficher la page correcte, mais avec la même url qu'avant... grrr...
    RewriteRule ^index(\.)([a-z0-9]*)$ http://www.example.com/ [L]
    # qui permet de supprimer 'index' de l'url du navigateur.
    RewriteRule ^page(=)$ http://www.example.com/ 
    # qui supprime 'page' du navigateur...

    Si c'est trop évident,
    et/ou si je n'ai pas posté au bon endroit, merci de m'en informer par mp et de verrouiller ce thread.


    edit dd32 : example.com pour les exemples d'url :wink:
     
  2. Mysteriousfea
    Mysteriousfea Nouveau WRInaute
    Inscrit:
    31 Mars 2008
    Messages:
    19
    J'aime reçus:
    0
    Ca m'intérésserait, si quelqu'un a une solution...
     
  3. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    >> Mais il semblerait que les caractères ? et = ne sont pas gérés par le mod_rewrite d'apache, dans l'adresse à réécrire.

    et pourtant ils le sont. Tout le jeu de caractère est pris en compte.

    Le = est un simple caractère.
    Le ? est un métacaractère, il doit être échapper pour retrouver sa simple valeur de caractere si tel est son emploi dans ton code.
    \?
     
  4. Mysteriousfea
    Mysteriousfea Nouveau WRInaute
    Inscrit:
    31 Mars 2008
    Messages:
    19
    J'aime reçus:
    0
    Tu aurais un code ?
    Merci
     
  5. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    pour cet exemple ?

    -http://www.example.com/accueil
    vers
    -http://www.example.com/index.php?page=accueil

    Code:
    RewriteRule   ^(.*)$    /index.php?page=$1 [L]
     
  6. Mysteriousfea
    Mysteriousfea Nouveau WRInaute
    Inscrit:
    31 Mars 2008
    Messages:
    19
    J'aime reçus:
    0
    Ca marche pas... Ca provoque une erreur serveur... Tu sais d'où ça peut venir ?
     
  7. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    pas franchement, mais j'ai encore droit a 1 tir ?

    Code:
    #execute la règle si le fichier existe
    RewriteCond %{REQUEST_FILENAME} -f
    #exlu le fichier index.php
    RewriteCond %{REQUEST_URI} !^/index.php
    #redirection
    RewriteRule   ([^/]*)$    /index.php?page=$1 [R,L]
     
  8. Mysteriousfea
    Mysteriousfea Nouveau WRInaute
    Inscrit:
    31 Mars 2008
    Messages:
    19
    J'aime reçus:
    0
    Non, marche pô...
     
  9. maxparm
    maxparm Nouveau WRInaute
    Inscrit:
    18 Avril 2008
    Messages:
    2
    J'aime reçus:
    0
    Bonjour,

    J'ai exactement le même problème!

    Quand je mets l'adresse www.domaine.tld/valeur1/valeur2 dans mon navigateur et que je valide, il me fait une sorte de redirection et affiche dans la barre d'adresse www.domaine.tld/index.php?id=valeur1&id2=valeur2

    Là je comprends pas trop ce qu'il se passe.

    PS: je teste sous easyphp 2.0
     
  10. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Il faut savoir que Apache ajoute un / après une URL qui ne finit pas avec un type mime.

    Donc une URL de la forme
    http://www.example.com/accueil
    est vue en fait comme
    http://www.example.com/accueil/

    On peut désactiver ce comportement, mais ce n'est pas conseillé. Je te laisse chercher dans la doc si tu veux vraiment le faire.

    Donc tes règles ne doivent pas supposer que l'URL se fini sans / à la fin.

    Par ailleurs, tu mets des [L] à la fin de tes règles, donc ça empêche l'execution des suivantes...

    Enfin, pour filter ce qui suit le ? il faut utiliser QUERY_STRING

    Essaie donc ce qui suit:

    Code:
    RewriteEngine On
    
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^(.*) /index.php?page=$1 
    
    sans aucune autre règle.

    La règle que tu voulais utiliser pour enlever index peut facilement faire boucler. Et ta dernière règle ne peut pas filtrer ce qui suit le ?
     
  11. maxparm
    maxparm Nouveau WRInaute
    Inscrit:
    18 Avril 2008
    Messages:
    2
    J'aime reçus:
    0
    Bonsoir!

    Merci pour ta réponse, mais j'ai essayé ce que tu disais et cela ne change rien au fait qu'après avoir tapé l'adresse réécrite dans la barre de lien de mon navigateur, il me reaffiche l'ancienne adresse.

    C'est vraiment bizarre ce problème, en plus je ne trouve pas d'autres personnes dans mon cas.

    Merci en tout cas!
     
  12. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    As tu vidé le cache et l'historique de ton navigateur?

    IL faut que tu enlève tout ça pour tester une nouvelle redirection.

    Si le problème persiste demande a ton hébergeur pourquoi ta réécriture ne marche pas.
     
  13. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    stoooppp it !!

    Si cela ne marche pas, c'est que le serveur refuse les fichiers réécrit sans extention !!

    Game over :D
     
  14. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Ce serait du a quelle option?

    Apache est reconfigurable par fichier .htaccess en principe.
     
  15. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    non... il faut avoir la main sur le serveur et la reconfiguration se fait à partir du fichier httpd.conf
     
  16. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Ca je sais, merci :D

    Mais par defaut c'est tout reconfigurable.

    Et la vrai question est: quelle serait l'option qui interdirait la récriture de fichiers sans extension?

    Par défaut, un / est ajouté quand il n'y a pas d'extension. Donc il faut prendre en compte cette / terminale dans les règles, c'est ce que j'ai proposé il me semble.

    Mais là la réécriture semble marcher puisque le bon contenu s'affiche. C'est la'ffichage de l'adresse réécrite qui semble bizarre.
     
  17. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    >> Apache est reconfigurable par fichier .htaccess en principe.

    C'est ici que je t'ai répondu non. On peux donner des directives a Apache a partir du fichier .htaccess mais en aucun cas on peut reconfigurer le serveur a partir de ce fichier.

    Comme faire cela, j'en ai aucune idée. Par experience, certain serveur accepte les fichiers réécrient sans extention, d'autres non.

    A partir du moment ou cette règle est mauvaise par principe:
    RewriteRule (.*) /index.php?page=$1
    -> mélange fichier/répertoire

    ..je ne vois pas trop l'interet de s'attarder sur ce problème.
     
  18. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Dans la doc Apache :
    http://httpd.apache.org/docs/2.0/fr/configuring.html#htaccess

    il est explicitement dit que
    C'est pour cela que la question intéressante est de savoir quelle serait la directive qui controle le comportement que tu décrit.
     
  19. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    "Apache permet de délocaliser la gestion de la configuration"

    vu les options ca fait sourire ^^

    Regarde les directives et le contexte:
    http://httpd.apache.org/docs/2.0/fr/mod/core.html

    En tout cas, relisant la doc avec plaisir, ca faisait longtemps que je cherchais comment avoir plusieurs fichiers .htaccess et j'ai enfin trouvé!!

    Code:
    AccessFileName .htaccess_bis
    :D
     
  20. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Tu ne répond jamais a ma question: quelle serait la directive qui controle le comportement que tu décris (interdire la réécriture pour les adresses sans extension mime)?

    C'est seulement en la connaissant qu'on peut savoir s'il est possible de changer le comportement dans un .ht access.

    Et tant mieux si la doc te fais sourire...
     
  21. Vap
    Vap WRInaute impliqué
    Inscrit:
    17 Juin 2007
    Messages:
    983
    J'aime reçus:
    0
    Pour revenir au pb de départ, essaie de rajouter ça dans ton .htaccess:

    Code:
    Options -MultiViews
    
     
  22. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    ...j'ai répondu très honnetement 2 posts avant :
     
Chargement...
Similar Threads - réécrire urls php Forum Date
Reecrire urls de sous-domaine URL Rewriting et .htaccess 27 Mars 2008
réécrire /categorie.php?id=xxx en /categorie/id URL Rewriting et .htaccess 13 Septembre 2020
Réécrire url sans la variable Référencement Google 19 Avril 2018
Rediriger/réécrire toutes les pages index.html contenues dans plusieurs dossiers URL Rewriting et .htaccess 1 Mars 2016
Réécrire des articles automatiquement Rédaction web et référencement 23 Février 2016
URL rewriting : réécrire automatiquement un bout de l'url URL Rewriting et .htaccess 21 Juillet 2014
Réécrire les balises Title Débuter en référencement 14 Novembre 2013
Réecrire url avec lang URL Rewriting et .htaccess 13 Octobre 2013
réécrire .php en .html URL Rewriting et .htaccess 2 Janvier 2012
Réecrire l'url d'un répertoire vers le répertoire parent URL Rewriting et .htaccess 15 Mai 2011
réécrire index.php?id=xxx avec le titre d'un champs mysql URL Rewriting et .htaccess 14 Mars 2011
Réécrire des URL avec un p... de point d'interrogation ? URL Rewriting et .htaccess 10 Décembre 2010
HS: réécrire une url Débuter en référencement 28 Novembre 2010
Larry Page (Google) accuse Steve Jobs de réécrire l'histoire dans les mobiles Google : l'entreprise, les sites web, les services 12 Juillet 2010
Réécrire et OVH URL Rewriting et .htaccess 5 Juillet 2010
Réécrire une seule url ? avec .htaccess URL Rewriting et .htaccess 22 Juillet 2009
Réécrire URL (remplacer une url par un mot) URL Rewriting et .htaccess 17 Avril 2009
Réécrire les URL de pages existantes pour y changer un mots URL Rewriting et .htaccess 15 Avril 2009
[URL rewriting] Réécrire des pages multiples de 8 en page-1 URL Rewriting et .htaccess 6 Décembre 2008
Comment faire pour réécrire des url générées par script php URL Rewriting et .htaccess 28 Octobre 2008