- Statut
- En attente de l’auteur
- Signalé pour
- WPML SEO 2.1.0
- Extension/thème associé
- Yoast SEO
- Étiquettes de sujet
- Compatibility
Aperçu de l’anomalie
Lors de l’utilisation de l’extension Yoast SEO Pro, les règles de redirection RegEx ne fonctionnent pas de la même manière dans les différentes langues. Le comportement est différent pour la langue par défaut et la langue secondaire.
Par exemple, si vous créez une règle de redirection comme ^/en/faq/(.+)$ vers /en/support/$1, elle peut ne pas fonctionner comme prévu lorsque vous essayez d’y accéder via http://example.com/en/faq/test/.
Solution de contournement
Option 1
Comme solution de contournement rapide, vous pouvez créer des règles différentes.
En suivant l’exemple initial :
- ^/faq/(.+)$ redirige vers /support/$1
- ^faq/(.+)$ redirige vers /en/support/$1
Option 2
Assurez-vous d’avoir une sauvegarde complète de votre site avant de continuer.
- Ouvrez le fichier …/wp-content/plugins/wp-seo-multilingual/classes/class-wpml-wpseo-redirection.php.
- Cherchez la ligne 34.
- Remplacez ce code :
foreach ( $redirections as $redirection ) { if ( $redirection['origin'] === $url || '/' . $redirection['origin'] === $url ) { return true; } } - Par :
foreach ( $redirections as $redirection ) { if($redirection['format'] == 'regex'){ // Ensure $url starts with /, if regex would need to check if string starts with this is needed. if(strpos($url, '/', 0) !== 0){ $url = '/' . $url; } // Lets use ~ as a regex delimiter instead of /, as we are matching a URL. preg_match('~' . $redirection['origin'] . '~', $url, $matches); if(count($matches) > 0){ return true; } } else if($redirection['origin'] === $url || '/' . $redirection['origin'] === $url){ return true; } }