WPML

ภาพรวมของปัญหา

เมื่อใช้ปลั๊กอิน 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;
    				}
    }

ปัญหาที่ทราบแล้วทั้งหมด

ยังคงพบปัญหานี้อยู่หรือไม่

หากการอัปเดตไม่สามารถแก้ไขปัญหานี้ได้ ส่งคำถามถึงฝ่ายสนับสนุน และเราจะตรวจสอบร่วมกับคุณ