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

Langage PHP Discussion :

utiliser $_SERVER["REQUEST_URI"] pour faire de la réécriture d'URL


Sujet :

Langage PHP

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut utiliser $_SERVER["REQUEST_URI"] pour faire de la réécriture d'URL
    Bonjour,

    je souhaite faire une réécriture d'URL (en gros aujourd'hui, j'ai des URLs du type https://pasdpanique.fr/?action=Nous-contacter et je souhaite qu'elles deviennent comme ça : https://pasdpanique.fr/nous-contacter (Donc supprimer le /?action et transformer la majuscule en minuscule). En principe, cette réécriture se fait à l'aide du fichier .htaccess et d'une directive RewriteRule. Néanmoins, je n'y connais rien et n'y arrive pas. Je me disais qu'il était peut-être possible de le faire avec du code PHP et la variable $_SERVER["REQUEST_URI"]. Juste une idée en l'air que je n'arrive pas à concrétiser. Pensez-vous que mon idée tient la route ?

  2. #2
    Membre éclairé Avatar de Chou-ette
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2018
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 57
    Par défaut
    Bonjour,

    Quelques tâtonnements sur Google et DVP suffisent à priori : DVP : URL REWRITING

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    merci pour la réponse (J'étais pas dispo tous ces jours derniers).
    Si possible, j'aimerais faire ça en PHP sans recourir à une réécriture d'URL (ce que je maîtrise très peu). On m'a suggéré parse_url.php. Ce qui me plait, c'est : Les URL partielles et invalides sont également acceptées, la fonction parse_url() fera de son mieux pour les analyser correctement. . Par contre, il faut déjà récupérer l'URL, tout en évitant un not found. Savez-vous comment je pourrais faire ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    712
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 712
    Par défaut
    Il ne suffit pas de réécrire les URLs, il faut encore que le serveur reconnaisse et réponde à ces URLs. Sinon ça va se traduire par une erreur 404.
    Cela implique une fonction routeur ou quelque chose de ce genre.

    Je prônerais vraiment d'utiliser un .htaccess (si on est sous Apache), et la démarche est alors un peu différente. Si le serveur reçoit https://pasdpanique.fr/nous-contacter il interprète cela de manière transparente comme: https://pasdpanique.fr/?action=Nous-contacter.
    En gros, on peut faire un petit regex qui extrait ce qui est après le nom de domaine et le rajoute comme argument à la page action. La page citée plus haut serait un bon début.

    Ah un petit cadeau pour la route: pour tester et troubleshooter les règles .htaccess: https://htaccess.madewithlove.com/

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    La page citée plus haut serait un bon début.
    Je suppose que tu parles du lien dans le post #2...

    Citation Envoyé par binarygirl Voir le message
    Ah un petit cadeau pour la route: pour tester et troubleshooter les règles .htaccess: https://htaccess.madewithlove.com/
    Merci, mais je teste en local, donc pas besoin de tester autrement...

    J'ai une petite idée (qui reste à approfondir) pour gérer les erreurs 404 : si fichier non trouvé, redirection avec .htaccess vers un fichier PHP qui va faire le boulot. Car je me sens assez mal pour écrire une regex. Est-ce que ça tient la route ?

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    J'ai quand même essayé de faire une réécriture d'URL avec .htaccess.
    Code apache : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks
     
    # Activation du module de réécriture d'URL :
    RewriteEngine on
     
    #RewriteRule ^index.php/(.*)$ index.php?action=$1 [L]
    RewriteRule ^(.*)$ index.php?action=$1 [L]

    Mais ça se solde par not found. Peux-tu me corriger ?

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    712
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 712
    Par défaut
    Deux remarques:
    • Apache à lui seul ne va pas réécrite les URLs par magie, c'est à vous de le faire au niveau de votre site. Ce que Apache fait, c'est interpréter ces URLs de manière transparente en fonction de la règle décrite dans le .htaccess, autrement dit c'est comme annoncer des pages qui n'existent pas vraiment mais laisser le serveur les traduire
    • dans le log Apache error.log, voyez-vous le détail de l'erreur 404 et comment l'URL finale a été interprétée par le serveur ?

  8. #8
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    un expert m'a donné une solution sans réécriture d'URL...

    Dans index.php :
    Code php : 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
    <?php
    // analyse du path
    $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
     
    if ($path === false) {
        echo 'URL malformée';
        exit;
    }
     
    $path = mb_substr($path, 1);
     
    // ROUTING : en charge de retourner le bon controleur
    $ctrl_name = include 'config/routing.php';
     
    $ctrl = new $ctrl_name();
     
    include("src/elements/head.html");
    ?>
    <body>
    <?php
        include("src/elements/header.html");
        include("src/elements/menu.html");
    ?>
        <main class="container">
            <section>
                <?php $ctrl->invoke(); ?>
            </section>
        </main>

    Dans routing.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $routes = [
        'accueil' => PasDePanique\view\Accueil::class,
        ...
    ];
     
    if ($path === '') {
        return $routes['Accueil'];
    } else {
        return $routes[$path] ?? $routes['Accueil'];
    }

  9. #9
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    un expert m'a donné une solution sans réécriture d'URL...
    Un expert ne bricole pas mais code selon les normes. La norme c'est l'utilisation d'un .htaccess et un système de routage derrière. Le reste, c'est du bricolage.

  10. #10
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    Peut-être, mais maîtrisant très mal le code apache, j'aime bien ce "bricolage".

    Et son commentaire :
    il n'y a pas besoin mais alors pas du tout de réécriture d'url pour un truc*aussi*basique

  11. #11
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Dans le fichier de routing tu fais appel à une variable déclarée ailleurs ($path) puis tu retournes une valeur.

    En fait tu utilises un include comme si tu appelais une fonction.

    C'est plutôt pas terrible... Et cela ne passera pas les outils d'analyse statique tel que phpstan.

    [edit]
    Ton routing.php pourrait être simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $routes = [
        'accueil' => PasDePanique\view\Accueil::class,
        ...
    ];
     
    $path ??= 'accueil';
     
    return $routes[$path];
    [/edit]

  12. #12
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut


    dans index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // ROUTING : en charge de retourner le bon controleur
    include 'config/routing.php';
    $ctrl_name = generer($path);
     
    $ctrl = new $ctrl_name();

    dans routing.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function generer($path)
    {
        $routes = [
            'accueil' => PasDePanique\view\Accueil::class,
            ...
        ];
     
        $path ??= 'accueil';
     
        return $routes[$path];
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Autre] Utiliser la détection de visage pour faire de la responsive typography
    Par FirePrawn dans le forum Publications (X)HTML et CSS
    Réponses: 5
    Dernier message: 14/02/2013, 16h48
  2. Réponses: 1
    Dernier message: 12/02/2013, 15h48
  3. utiliser C# ou ASP.NET pour faire du web ?
    Par Rick62 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 28/01/2008, 10h20
  4. Utiliser un tableau de résultat pour faire une jointure
    Par Xavier1979 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/06/2007, 13h27
  5. Réponses: 5
    Dernier message: 23/02/2007, 09h04

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