.htaccess untuk mengalihkan ke struktur situs web baru

May 17 2019

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/1tidak 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

1 DocRoot May 20 2019 at 22:15

Sedikit kerumitan muncul karena Anda memiliki seasonsdan episodes(dengan s) di struktur URL lama dan seasondan 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 .htaccessfile 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]

\dadalah kelas karakter singkatan untuk digit (sama seperti [0-9]) dan \d+cocok dengan 1 atau lebih digit.

$1, $2dan $3merupakan 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_URIvariabel 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?

JoseManuel May 18 2019 at 06:06

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]