WPML
Статус
Ожидается ответ автора
Заявлено для
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;
    				}
    }

Все известные проблемы →