WPML
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;
    				}
    }

Tutti i problemi noti →