it-swarm-id.com

Perubahan struktur permalink - pengalihan di htaccess memutus tautan arsip

Ketika saya mulai dengan blog saya, permalink dan struktur berikut:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

Beberapa waktu lalu, saya mengubah struktur permalink menjadi "http://<domain>/%postname%/" saja.

Untuk mengatasi tautan eksternal ke struktur permalink lama, saya menambahkan baris berikut di file htaccess saya:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

Sekarang masalahnya adalah bahwa garis redirect memecah tautan arsip, mis. "http://<domain>/2010/09/02" diarahkan ke halaman depan alih-alih menunjukkan pos dari 2 September 2010.

Apakah mungkin untuk memperbaiki arahan pengalihan di htaccess, atau apakah saya tidak akan bisa makan kue dan memilikinya juga?

2
TFM

RedirectMatch dari Mod_Alias ​​tidak sekuat Mod_Rewrite. Jika Anda memiliki Mod_Rewrite di Host Anda (Pretty Permalinks memanfaatkannya sebagai contoh), Anda dapat membuat pengalihan hanya jika URL tidak dalam format tautan Arsip.

Untuk menguji kasus itu, ada RewriteCondNAME _ dan untuk membuat perintah redirect, ada RewriteRule ... [R=301] direktif.

Contoh berdasarkan data Anda:

RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]

Ini belum diuji tetapi saya pikir itu harus melakukan pekerjaan. Saya telah menggunakan kuantifier ({2}) untuk lebih menentukan berapa banyak angka yang Anda harapkan. Di samping itu di RewriteCond saya telah membuat pola yang hanya cocok dengan 20 .. dan 19 .. tahun.

Baris pertama (kondisi, RewriteCondname__) memeriksa untuk tidak mencocokkan dengan Archive-URL dan hanya jika tidak cocok, aturan untuk melakukan pengalihan akan dieksekusi. RewriteRulepada dasarnya melakukan hal yang sama dengan arahan RedirectMatchAnda.

2
hakre