Récupérer URL avec php

Bonjour,

comment récupérer l'URL d'une page web avec php après le rewriting .htaccess
par exemple :
l'adresse original est
http://www.site.com/index.php&id=14&func=start&lng=fr
qui donne
http://www.site.com/information-sur-14.html

donc comment récupérer la deuxième adresse ?!!

6 réponses

  1. Salut,

    Essayez avec :
    echo "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    
    1. non ca marche pas, toujours ça donne l'adresse original
  2. est-ce toi qui a écrit les scripts php de ton site, ou utilises-tu un cms?
    1. A qui parlez-vous?
    2. à enn_kh
  3. tu essayes de faire de l'url_rewriting mais apparemment tu te prend à l'envers

    l'adresse original doit être
    http://www.site.com/information-sur-14.html
    et après passage par le htaccess te renvoyer
    http://www.site.com/index.php&id=14&func=start&lng=fr

    donc
    $_GET['id'] = 14;
    $_GET['func] = 'start';
    $_GET['lng] = 'fr';
    1. non, ma question est comment avoir
      ce lien http://www.site.com/information-sur-14.html dans une chaine string
    2. elle est pas claire ta question

      tu écrit tout simplement : http://www.site.com/information-sur-14.html
  4. Contributeur
    Bonjour enn_kh,

    On dirait que dans le dialogue entre Apache et Php, Php ne reçoit que le résultat du traitement de l'URL par mod_rewrite (tu pourrais afficher $_SERVER en totalité pour t'en assurer, et voir s'il n'y a pas une qui puisse te servir).

    print_r($_SERVER) 

    Sinon, maka54 a raison, http://www.site.com/index.php&id=14&func=start&lng=fr est le résultat de l'url rewrite de la requête http://www.site.com/information-sur-14.html fait par mod_rewrite et pas l'inverse comme tu sembles l'indiquer dans ton message d'origine.

    Une autre possibilité est d'essayer de répliquer le traitement de l'expression rationnelle utilisée avec la fonction Php preg_replace.

    Il suffit en théorie de connaître l'expression utilisée par les directives utilisées par mod_rewrite (contenues dans ton .htaccess), et élaborer l'expression inverse pour obtenir l'URL :-) avec preg_replace.

    S'il y a de nombreuses règles de réécriture cela peut être rigolo ;-)

    Il y a quoi dans ton .htaccess ?

    Dal
    1. Il dit que :
      l'adresse original est :
      http://www.site.com/index.php&id=14&func=start&lng=fr
      ce qui donne une fois ré écrit :
      http://www.site.com/information-sur-14.html

      Donc son url rewriting est déjà en place et fonctionnel.

      Ensuite il dit vouloir récupérer l'url ré écrite.
      Si il place la ligne suivante dans la page ré écrite :
      echo "[http://]" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];

      il obtient l'url en cours de la page consulté, donc l'url ré écrite. Il faut juste placer la ligne de code ci-dessus dans une variable ou fonction pour récupérer l'url.
      Une question stupide engendre une réponse stupide!
      Une question mal formulé engendre une réponse aléatoire!
      1. vu comme çà en effet mais comme il t'a répondu au ton premier

        cette ligne lui renvoie l'adresse originale :
        http://www.site.com/index.php&id=14&func=start&lng=fr

        Donc non son url rewriting n'est pas en place
      2. @maka54 bien vu.
        D'où ma question au début: a-t-il lui même écrit son site, maîtrise-t-il tout les scripts d'url rewriting et le .htaccess ? Car si c'est le cas il ne devrait avoir pas à recupérer la REQUEST_URI pour rétro-fabriquer l'URI originelle...
    2. Contributeur
      En gros, il y a un malentendu.

      Si les URL telles que http://www.site.com/information-sur-14.html arrivent au serveur, c'est qu'elles ont été générées dans des pages servies par celui-ci.

      Il doit donc y avoir dans le code Php de notre ami enn_kh du code qui s'occupe déjà de construire une jolie URL à partir de paramètres internes.

      Comme indiqué plus haut, le "rewriting .htaccess" (le module Apache mod_rewrite certainement, bien que notre ami ne le précise pas) ne s'occupe que de réécrire les URL des requêtes reçues par le serveur.

      Dal