- Estado
- Esperando al autor
- Notificado para
- WPML SEO 2.1.0
- Plugin/tema relacionado
- Yoast SEO
- Etiquetas de temática
- Compatibility
Resumen del problema
Al usar el plugin Yoast SEO Pro, las reglas de redirección RegEx no funcionan de la misma manera en los distintos idiomas. Existe un comportamiento diferente para el idioma predeterminado y el idioma secundario.
Por ejemplo, si crea una regla de redirección como ^/en/faq/(.+)$ a /en/support/$1, es posible que no funcione como se espera al intentar acceder a través de http://example.com/en/faq/test/.
Solución alternativa
Opción 1
Como solución alternativa rápida, puede crear reglas diferentes.
Siguiendo el ejemplo inicial:
- ^/faq/(.+)$ redirige a /support/$1
- ^faq/(.+)$ redirige a /en/support/$1
Opción 2
Asegúrese de tener una copia de seguridad completa de su sitio antes de continuar.
- Abra el archivo …/wp-content/plugins/wp-seo-multilingual/classes/class-wpml-wpseo-redirection.php.
- Busque la línea 34.
- Reemplace este código:
foreach ( $redirections as $redirection ) { if ( $redirection['origin'] === $url || '/' . $redirection['origin'] === $url ) { return true; } } - Por:
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; } }