- Stato
- In attesa dell’autore
- Segnalato per
- WPML SEO 2.1.0
- Plugin/tema correlato
- Yoast SEO
- Tag dell’argomento
- Compatibility
Panoramica del problema
Quando utilizzi il plugin Yoast SEO Pro, le regole di reindirizzamento RegEx non funzionano allo stesso modo nelle diverse lingue. Il comportamento è diverso per la lingua predefinita e la lingua secondaria.
Ad esempio, se crei una regola di reindirizzamento come ^/en/faq/(.+)$ verso /en/support/$1, potrebbe non funzionare come previsto quando tenti di accedervi tramite http://example.com/en/faq/test/.
Soluzione alternativa
Opzione 1
Come soluzione alternativa rapida, puoi creare regole diverse.
Seguendo l’esempio iniziale:
- ^/faq/(.+)$ reindirizza a /support/$1
- ^faq/(.+)$ reindirizza a /en/support/$1
Opzione 2
Assicurati di avere un backup completo del tuo sito prima di procedere.
- Apri il file …/wp-content/plugins/wp-seo-multilingual/classes/class-wpml-wpseo-redirection.php.
- Cerca la riga 34.
- Sostituisci questo codice:
foreach ( $redirections as $redirection ) { if ( $redirection['origin'] === $url || '/' . $redirection['origin'] === $url ) { return true; } } - Con:
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; } }