Tôi có một trang web ban đầu được xây dựng bằng cách sử dụng ASP cổ điển. Khoảng một năm trước, nó đã được viết lại bằng PHP. Điều này khiến phần mở rộng tệp thay đổi và một số trang đã được chuyển đến vị trí mới trong trang web. Đương nhiên, chúng tôi đã thực hiện chuyển hướng 301 từ các URL cũ sang các URL mới để người dùng và công cụ tìm kiếm của họ có thể tìm thấy vị trí mới của họ. Điều này hoạt động tốt.
Chúng tôi cũng đã xây dựng cho họ một công cụ cho phép chủ sở hữu trang web tạo các URL nhỏ của riêng họ sẽ chuyển hướng đến một trang có các biến theo dõi chiến dịch Google Analytics có trong URL để họ có thể theo dõi chiến dịch và xem cách thức hoạt động của chiến dịch.
Vấn đề tôi có là các quy tắc theo dõi chiến dịch mâu thuẫn với các chuyển hướng 301 và ngăn chặn các chuyển hướng hoạt động.
Đây là mã theo dõi chiến dịch:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]
Như bạn có thể thấy nó kiểm tra xem một tệp có tồn tại không và nếu nó không chuyển hướng đến tập lệnh theo dõi (theo dõi.php), sau đó sẽ lấy mã theo dõi và chuyển hướng đến URL thích hợp với mã chiến dịch Google Analytics trong truy vấn chuỗi.
Mã đó khiến các quy tắc như thế này thất bại:
redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php
Điều này có nghĩa là điều này không hoạt động cùng nhau như các quy tắc theo dõi nói, "nếu một tệp không được tìm thấy chuyển hướng đến theo dõi.php". Những gì tôi cần là cho các chuyển hướng 301 chạy trước và nếu không có cái nào khớp với nhau, thì hãy chuyển hướng đến tập lệnh theo dõi. Đặt quy tắc theo dõi bên dưới chuyển hướng 301 không thay đổi kết quả.
Điều này có thể được thực hiện thông qua .htaccess? Hoặc tôi sẽ cần sửa đổi tập lệnh theo dõi để nếu không tìm thấy chiến dịch, nó sẽ kiểm tra xem ID chiến dịch có thực sự là một trang cũ cần được chuyển hướng và sau đó thực hiện chuyển hướng 301 từ đó không?