- Статус
- Ожидается ответ автора
- Заявлено для
- WPML SEO 2.1.0
- Связанный плагин/тема
- Yoast SEO
- Теги темы
- Compatibility
Обзор проблемы
При использовании плагина Yoast SEO Pro правила перенаправления RegEx работают неодинаково для разных языков. Поведение отличается для языка по умолчанию и дополнительного языка.
Например, если Вы создадите правило перенаправления с ^/en/faq/(.+)$ на /en/support/$1, оно может работать не так, как ожидается, при попытке перехода по адресу http://example.com/en/faq/test/.
Обходное решение
Вариант 1
В качестве быстрого обходного решения Вы можете создать разные правила.
Следуя первоначальному примеру:
- ^/faq/(.+)$ перенаправляет на /support/$1
- ^faq/(.+)$ перенаправляет на /en/support/$1
Вариант 2
Перед продолжением обязательно создайте полную резервную копию Вашего сайта.
- Откройте файл …/wp-content/plugins/wp-seo-multilingual/classes/class-wpml-wpseo-redirection.php.
- Найдите строку 34.
- Замените этот код:
foreach ( $redirections as $redirection ) { if ( $redirection['origin'] === $url || '/' . $redirection['origin'] === $url ) { return true; } } - На:
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; } }