.htaccess untuk mengalihkan ke struktur situs web baru
Saya telah mengubah struktur URL situs web dan saya ingin mengalihkan pengguna saya
Masalah
Struktur baru sangat berbeda, dan lebih ketat .
TUA
1 - https://example.com/serie-tv
2 - https://example.com/serie-tv/1845578-the-walking-dead
3 - https://example.com/serie-tv/1845578-The-Walking-Dead/seasons/1
4 - https://example.com/serie-tv/1845578-the-walking-dead/seasons/1/episodes/1
BARU
1 - https://example.com/browse?type=series
2 - https://example.com/titles/1845578
3 - https://example.com/titles/1845578/season/1
4 - https://example.com/titles/1845578/season/1/episode/1
Pengalihan dari https://example.com/serie-tv/1845578-the-walking-dead/seasons/1
untuk https://example.com/titles/1845578-the-walking-dead/season/1
tidak akan berhasil.
Perlu mengalihkan hanya ke https://example.com/titles/1845578/season/1
Untuk saat ini saya hanya berhasil mengarahkan semua yang ada di bawah https://example.com/serie-tv /.....
kehttps://example.com/browse?type=series
dengan kode ini:
RewriteCond %{HTTP_HOST} ^example\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^serie\-tv\/?(.*) "https\:\/\/example\.com\/browse?type=series" [R=301,L]
Jawaban
Sedikit kerumitan muncul karena Anda memiliki seasons
dan episodes
(dengan s
) di struktur URL lama dan season
dan episode
(tidak s
) di struktur URL baru, jadi Anda tidak dapat menggunakan solusi umum yang hanya menyalin jalur URL.
RewriteCond %{HTTP_HOST} ^example\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.example\.com$
Jika Anda hanya memiliki satu domain, maka ketentuan ini tidak berguna.
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
Untuk saat ini, kita bisa mengabaikannya juga. cPanel akan secara otomatis memasukkan ini seperti yang diperlukan saat memperbarui sertifikat SSL Anda secara otomatis.
Untuk saat ini saya hanya berhasil mengarahkan semuanya di bawah ...
Saya berasumsi Anda tidak ingin mengalihkan "semuanya" karena URL contoh sebelumnya tidak menyatakan ini?
RewriteRule ^serie\-tv\/?(.*) "https\:\/\/example\.com\/browse?type=series" [R=301,L]
Ada garis miring terbalik yang tidak perlu di sini yang memengaruhi keterbacaan. Tidak perlu melepaskan tanda hubung literal ( -
) dan garis miring pada RewriteRule
pola . Dan dalam string substitusi (yang merupakan string "biasa", bukan regex), tidak perlu melepaskan titik dua ( :
), garis miring (lagi), dan titik. Karakter "literal" ini tidak memiliki arti khusus dalam konteks penggunaannya. (Ini adalah keluaran tipikal yang menggunakan fitur pengalihan cPanel - yang akan sering menempatkannya di tempat yang salah juga.)
Cobalah sesuatu seperti berikut ini, di dekat bagian atas .htaccess
file Anda :
RewriteEngine On
# Redirect "/serie-tv"
RewriteRule ^serie-tv$ /browse?type=series [R=302,L] # Redirect "/serie-tv/1845578-the-walking-dead" RewriteRule ^serie-tv/(\d+)-[^/]+$ /titles/$1 [R=302,L] # Redirect "/serie-tv/1845578-the-walking-dead/seasons/1" RewriteRule ^serie-tv/(\d+)-[^/]+/seasons/(\d+)$ /titles/$1/season/$2 [R=302,L]
# Redirect "/serie-tv/1845578-the-walking-dead/seasons/1/episodes/1"
RewriteRule ^serie-tv/(\d+)-[^/]+/seasons/(\d+)/episodes/(\d+)$ /titles/$1/season/$2/episode/$3 [R=302,L]
\d
adalah kelas karakter singkatan untuk digit (sama seperti [0-9]
) dan \d+
cocok dengan 1 atau lebih digit.
$1
, $2
dan $3
merupakan referensi kembali ke grup yang ditangkap dalam RewriteRule
pola . Lebih efisien untuk menguji apa yang Anda bisa dalam RewriteRule
pola daripada menggunakan kondisi sebelumnya yang memeriksa REQUEST_URI
variabel server.
Perhatikan bahwa ini saat ini adalah pengalihan 302 (sementara). Hanya ubah ke 301 (permanen) setelah Anda menguji apakah semuanya berfungsi dengan baik - untuk menghindari masalah penyimpanan ke cache.
Anda perlu membersihkan cache browser Anda sebelum menguji.
Selain: Struktur URL lama, yang menyertakan judul mungkin lebih baik dari perspektif SEO / kegunaan?
Saya pikir ini harus melakukan apa yang Anda butuhkan.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /serie-tv$ [NC] RewriteRule ^(.*)$ browse?type=series [R=301,L]
RewriteCond %{REQUEST_URI} /serie-tv/([0-9]*)\-([^/]*)/?(.*)? [NC]
RewriteRule ^(.*)$ titles/%1/%3 [R=301,L]