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 :

redirection avec wordpress et le mod rewrite


Sujet :

Apache

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 392
    Points : 863
    Points
    863
    Par défaut redirection avec wordpress et le mod rewrite
    bonjour,

    j'ai une question technique qui concerne la redirection.
    D'expérience, j'ai toujours fait des redirections de page php ou d'arboresence grâce à apache et le module rewrite, et donc le fichier htaccess.
    je m'interroge sur wordpress qui permet de faire des redirections sans toucher (sans modifier) le fichier htaccess, et donc je me demande comment c'est possible techniquement.

    Dans wordpress on, on peut creer des categorie de page qui crée (sans la main de l'utilisateur) une arboressence comme www.monsite.com/macategorie/page1

    sachant que le "pion" macategorie n'est pas inscrit dans une rule du htacess, comment fait appache pour dire que l'url qui contient "macategorie" doit être redirigée vers tel endroit ? en plus, wordpress ne crée pas non plus de dossier "macategorie" donc comment il fait ?

    Demain, je renomme "macategorie" en "categorie" grâce à la propriété Permalien de wordpress, et la redirection fonctionne. comment est-ce possible ? le fichier htaccess n'est pas modifié par wordress, sa date ne change pas!
    d'où vient cette "magie" ?
    Sauf erreur, apache ne va pas pomper dans la base de données pour connaître la redirection à faire, alors comment il fait ?

    bonne journée à vous.

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Tout comme ça serait fait dans un .htaccess, Wordpress contient tout un ensemble de règles de réécriture.

    Vous pouvez les voir grâce à ce bout de code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rules = get_option( 'rewrite_rules' );
    echo PHP_EOL . '<pre>$rules: ' . print_r($rules, true) . '</pre>' . PHP_EOL;

    Et donc, tout comme Apache, il regarde l'URL et fait la redirection en fonction des règles.
    Ce qui se passe ensuite est qu'il regarde les slugs (plutôt qu'un ID) des permaliens pour faire une correspondance dans la DB

    Il est possible d'ajouter de nouvelles règles en utilisant la fonction add_rewrite_rule()

    Voici un exemple d'une classe que j'ai créé pour préfixer les URL des articles :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
     
    class BlogURLPrefix {
     
        private $blog_url_prefix = 'news';
     
        public function __construct() {
            add_action('init', [$this, 'my_custom_rewrite_rules']);
            add_action('pre_post_link', [$this, 'my_pre_post_link'], 10, 3);
        }
     
        /**
         * Add new rewrite rules for "posts"
         * We prefix all news by "news" (default)
         */
        public function my_custom_rewrite_rules() {
            add_rewrite_rule($this->blog_url_prefix . '/([^/]*)$', 'index.php?name=$matches[1]', 'top');
            add_rewrite_tag('%' . $this->blog_url_prefix . '%', '([^/]*)');
        }
     
        /**
         * We replace default posts permalinks with our new prefixed one
         * 
         * @param string $permalink
         * @param WP_Post $post
         * @param bool $leavename
         * @return string
         */
        public function my_pre_post_link($permalink, $post, $leavename) {
            if ($post->post_type === 'post') {
                $permalink = $this->blog_url_prefix . get_option('permalink_structure');
            }
            return $permalink;
        }
     
    }
     
    new BlogURLPrefix();

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 392
    Points : 863
    Points
    863
    Par défaut
    oui mais avant d'être interprété par php, c'est interprété par apache/htaccess non ?

    donc quand apache recoit la demande d'aller à monsite.com/macategorie/page.php , par defaut il regarde en premier htaccess , non ? et si dedans il il y a pas de rule qui concerne macategorie , il fait quoi ? il y a une règle pour lui dire d'aller vers une page php (qui elle fera une redirection type header (location:...) en fonction du contenu BD c-a-d du permalink ) ?

    quand on accède à une page native (avec un vrai dossier /macategorie/), et quand on accède à une page par redirection php/header , ça n'a pas le même code (302 par la redirection et 200 si l'arboresence est native)

    je me trompe ?

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    dans le fichier .htaccess de wordpress, il y a indiqué que toutes les requêtes sont envoyées au fichier index.php.
    à cet endroit, wordpress calcule ce qu'il doit afficher ou s'il doit faire une redirection comme expliqué par darkstar123456. et s'il y a une redirection à faire c'est le code php qui le génère avec la fonction "header" :
    https://www.php.net/manual/fr/function.header.php

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/11/2019, 10h54
  2. Réponses: 4
    Dernier message: 17/06/2011, 21h56
  3. Url rewriting & redirection avec paramètres
    Par dom_bxl dans le forum Apache
    Réponses: 1
    Dernier message: 07/04/2009, 12h17
  4. [URL Rewriting] redirection avec exceptions
    Par _fpl_ dans le forum Apache
    Réponses: 8
    Dernier message: 17/06/2008, 23h53
  5. [URL Rewriting] erreur avec mod rewrite
    Par deny dans le forum Apache
    Réponses: 5
    Dernier message: 14/01/2008, 15h37

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