Tổng quan về sự cố
Khi sử dụng plugin Yoast SEO Pro, các quy tắc chuyển hướng RegEx không hoạt động giống nhau trên các ngôn ngữ khác nhau. Có sự khác biệt về cách hoạt động đối với ngôn ngữ mặc định và ngôn ngữ phụ.
Ví dụ, nếu bạn tạo một quy tắc chuyển hướng như ^/en/faq/(.+)$ đến /en/support/$1, nó có thể không hoạt động như mong đợi khi cố gắng truy cập thông qua http://example.com/en/faq/test/.
Giải pháp tạm thời
Sự cố này đã được khắc phục. Việc cập nhật lên phiên bản mới nhất giải quyết vấn đề này trên trang web của bạn, vì vậy bạn chỉ cần giải pháp tạm thời này nếu chưa thể cập nhật.
Tùy chọn 1
Như một giải pháp tạm thời nhanh chóng, bạn có thể tạo các quy tắc khác nhau.Theo ví dụ ban đầu:
- ^/faq/(.+)$ chuyển hướng đến /support/$1
- ^faq/(.+)$ chuyển hướng đến /en/support/$1
Tùy chọn 2
Vui lòng đảm bảo đã tạo một bản sao lưu đầy đủ cho trang web của bạn trước khi tiếp tục.- Mở tệp …/wp-content/plugins/wp-seo-multilingual/classes/class-wpml-wpseo-redirection.php.
- Tìm dòng 34.
- Thay thế mã này:
foreach ( $redirections as $redirection ) { if ( $redirection['origin'] === $url || '/' . $redirection['origin'] === $url ) { return true; } } - Bằng:
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; } }