ฉันมีเว็บไซต์ที่เดิมสร้างขึ้นโดยใช้ ASP คลาสสิก ประมาณหนึ่งปีที่ผ่านมามันถูกเขียนใหม่ใน PHP ทำให้ส่วนขยายไฟล์มีการเปลี่ยนแปลงและบางหน้าถูกย้ายไปยังที่ตั้งใหม่ภายในเว็บไซต์ โดยปกติเราทำการเปลี่ยนเส้นทาง 301 จาก URL เก่าไปยัง URL ใหม่เพื่อให้ผู้ใช้และเครื่องมือค้นหาสามารถค้นหาตำแหน่งใหม่ได้ มันใช้งานได้ดี
นอกจากนี้เรายังสร้างเครื่องมือที่ช่วยให้เจ้าของไซต์สร้าง URL เล็ก ๆ ของตัวเองที่จะเปลี่ยนเส้นทางไปยังหน้าเว็บที่มีตัวแปรการติดตามแคมเปญ Google Analytics ซึ่งรวมอยู่ใน URL เพื่อให้พวกเขาสามารถติดตามแคมเปญและดูประสิทธิภาพของมัน
ปัญหาที่ฉันมีคือกฎการติดตามแคมเปญขัดแย้งกับการเปลี่ยนเส้นทาง 301 และป้องกันไม่ให้การเปลี่ยนเส้นทางทำงานได้เลย
นี่คือรหัสติดตามแคมเปญ:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]
ในขณะที่คุณสามารถดูมันตรวจสอบเพื่อดูว่าไฟล์ที่มีอยู่และถ้ามันไม่ได้เปลี่ยนเส้นทางไปยังสคริปต์ติดตาม (tracking.php) ซึ่งจะใช้รหัสติดตามและเปลี่ยนเส้นทางไปยัง URL ที่เหมาะสมด้วยรหัสแคมเปญ Google Analytics ในแบบสอบถาม เชือก
รหัสนั้นทำให้กฎเช่นนี้ล้มเหลว:
redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php
มันสมเหตุสมผลที่จะไม่ทำงานร่วมกันตามกฎการติดตามบอกว่า "หากไม่พบไฟล์ที่เปลี่ยนเส้นทางไปยัง tracking.php" สิ่งที่ฉันต้องการคือการเปลี่ยนเส้นทาง 301 ให้ทำงานก่อนและหากไม่ตรงกันให้เปลี่ยนเส้นทางไปยังสคริปต์ติดตาม การวางกฎการติดตามด้านล่างการเปลี่ยนเส้นทาง 301 จะไม่เปลี่ยนผลลัพธ์
สามารถทำได้ผ่าน. htaccess หรือไม่ หรือฉันจะต้องแก้ไขสคริปต์ติดตามเพื่อให้ไม่พบแคมเปญตรวจสอบว่ารหัสแคมเปญนั้นเป็นหน้าเก่าที่ต้องเปลี่ยนเส้นทางหรือไม่และเปลี่ยนเส้นทาง 301 จากที่นั่นหรือไม่