Penyingkat URL buatan sendiri bertentangan dengan 301 redirect

11

Saya memiliki situs web yang awalnya dibangun menggunakan ASP klasik. Sekitar setahun yang lalu ditulis ulang dalam PHP. Ini menyebabkan ekstensi file berubah dan beberapa halaman dipindahkan ke lokasi baru di dalam situs web. Tentu saja kami melakukan 301 pengalihan dari URL lama ke URL baru sehingga pengguna dan mesin pencari mereka dapat menemukan lokasi baru mereka. Ini berfungsi dengan baik.

Kami juga membuat mereka alat yang memungkinkan pemilik situs untuk membuat URL kecil mereka sendiri yang akan mengarahkan ulang ke halaman dengan variabel pelacakan kampanye Google Analytics yang termasuk dalam URL sehingga mereka dapat melacak kampanye dan melihat kinerjanya.

Masalah yang saya miliki adalah konflik aturan pelacakan kampanye dengan pengalihan 301 dan mencegah pengalihan bekerja sama sekali.

Ini kode pelacakan kampanye:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

Seperti yang Anda lihat, ini memeriksa untuk melihat apakah ada file dan apakah itu tidak diarahkan ke skrip pelacakan (tracking.php) yang kemudian mengambil kode pelacakan dan mengalihkan ke URL yang tepat dengan kode kampanye Google Analytics dalam kueri tali.

Kode itu menyebabkan aturan seperti ini gagal:

redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php

Masuk akal bahwa ini tidak bekerja bersama karena aturan pelacakan mengatakan, "jika file tidak ditemukan redirect ke tracking.php". Yang saya butuhkan adalah pengalihan 301 dijalankan terlebih dahulu, dan jika tidak ada yang cocok, maka arahkan ke skrip pelacakan. Menempatkan aturan pelacakan di bawah pengalihan 301 tidak mengubah hasil.

Bisakah ini dilakukan melalui .htaccess? Atau akankah saya perlu memodifikasi skrip pelacakan sehingga jika suatu kampanye tidak ditemukan akan memeriksa untuk melihat apakah ID kampanye sebenarnya adalah halaman lama yang perlu diarahkan dan kemudian melakukan 301 redirect dari sana?

John Conde
sumber

Jawaban:

5

Coba ubah arahan Anda mod_aliasmenjadi mod_rewritearahan.


Sunting: Contoh di bawah ini mengasumsikan bahwa Anda telah mengganti file ASP lama dengan file PHP di bawah jalur yang sama.

RewriteEngine on

# *.asp -> *.php
RewriteRule (.*)\.asp$ /$1.php [R=301,L]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

... atau Anda dapat melewati variabel ekspresi reguler dan menetapkan pengalihan eksplisit untuk masing-masing URI lama:

RewriteRule about\.asp$ /about.php [R=301,L]
RewriteRule capabilities\.asp$ /capabilities.php [R=301,L]
RewriteRule capacitors\.asp$ /capacitors.php [R=301,L]

Sunting # 2: Berikut adalah contoh yang harus mencakup sebagian besar situasi yang akan Anda temui:

RewriteEngine on

# Changes to path + Query String Append
RewriteRule ^/path/to/old\.asp$ /path/to/new/about.php [R=301,L,QSA]

# *.asp -> *.php + Query String Append
RewriteRule ^(.*)\.asp$ $1.php [R=301,L,QSA]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]
danlefree
sumber
Saya tidak yakin apa yang Anda maksud. Bisakah Anda memberi contoh berdasarkan apa yang saya tunjukkan dalam pertanyaan saya?
John Conde
Terima kasih atas hasil editnya. Masuk akal sekarang. Saya kira masalah terakhir saya adalah apa yang harus dilakukan dengan file yang jalurnya telah berubah? Apakah itu mungkin? Atau aku terlalu banyak bertanya?
John Conde
Anda dapat mengatur pengalihan eksplisit untuk file-file tersebut (jika sebagian besar jalur telah berubah, Anda juga dapat menggunakan pengalihan eksplisit untuk semua file untuk memastikan konfigurasi dapat dipertahankan).
danlefree
Saya curiga tidak memiliki [R=301,L]setelah setiap pengalihan yang menyebabkan masalah saya. Biarkan saya mencobanya dan saya akan memberi tahu Anda apa yang terjadi.
John Conde
The *.asp -> *.phpwildcard karya besar. Aturan individual untuk halaman yang bukan transisi langsung dan memiliki string kueri sedang bermasalah. Tapi ini sepertinya cara yang tepat untuk pergi. Jika saya tidak dapat menyelesaikan bagian itu, saya akan memulai pertanyaan baru tentang hal itu.
John Conde
-1

Saya akan membalikkan pengalihan dan membiarkannya seperti semula. Arahkan situs BARU Anda ke situs LAMA Anda. Situs LAMA Anda mungkin sudah mendapatkan manfaat dari tautan balik, usia situs web, dan SEO. Sayang sekali kehilangan itu hanya untuk menggantinya dengan situs yang lebih baru dengan peringkat halaman yang lebih rendah. Google menghukum pengalihan. Situs BARU Anda belum memiliki SEO apa pun di sana, jadi lebih baik menggunakan pengalihan yang satu itu :)

Brian McCarthy
sumber
Saya tidak berpikir mundur adalah solusi yang baik. Situs asli tidak dilakukan dengan baik dalam segala hal. Kami membuat situs lebih cepat, lebih bermanfaat, dapat diakses, terorganisir, dan dipelihara. Mereka tidak akan kehilangan apa pun dari arahan ulang karena ini adalah situs niche dan memiliki beberapa tautan untuk memulai dan sebagian besar pergi ke beranda yang tidak memerlukan arahan ulang. Jadi kami sama sekali tidak ingin kembali ke situs lama karena kami tidak mendapatkan apa-apa dan kehilangan banyak.
John Conde
FYI, Google tidak menghukum redirect. Satu-satunya masalah pengalihan adalah jika mereka dirantai terlalu dalam mereka berhenti mengikuti mereka dan beberapa PR hilang ketika melakukan 301 tetapi jumlahnya sepele dan layak dibandingkan dengan alternatif tidak melakukannya sama sekali.
John Conde