WPML

問題の概要

Yoast SEO Proプラグインを使用する場合、RegExのリダイレクトルールは異なる言語間で同じようには機能しません。デフォルト言語と第2言語とでは動作が異なります。

たとえば、^/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;
    				}
    }

すべての既知の問題

まだこの問題が発生しますか?

アップデートしても問題が解決しない場合は、サポートのご質問をお寄せください。一緒に調査いたします。