Nginx redirect produk dari kategori lama ke baru

9

Saya sedang membuat pengalihan produk dari kategori lama ke baru.

Saya berhasil membuatnya berfungsi dengan aturan berikut:

rewrite ^/old-category/(.*) /new-category/$1;

Tetapi saya ingin tahu kapan saya harus menggunakan tanda "garis akhir" $ dan apa bedanya dengan itu atau tanpa itu dalam kasus saya. Sebagai contoh:

rewrite ^/old-category/(.*)$ /new-category/$1;

Saya juga ingin mengarahkan pengguna jika mereka hanya menulis nama kategori lama (tanpa produk), haruskah saya membuat aturan baru hanya untuk pengalihan kategori atau saya dapat mengedit aturan saat ini di atas untuk bekerja dalam kedua kasus.

Terima kasih atas jawaban Anda sebelumnya.

Waktu analog
sumber

Jawaban:

9

Menjawab pertanyaan Anda secara berurutan ...

Ini

rewrite ^/old-category/(.*) /new-category/$1;

dan ini

rewrite ^/old-category/(.*)$ /new-category/$1;

seperti yang ditulis adalah setara. The .*aturan cocok 0 atau lebih dari "segala sesuatu", sehingga $berlebihan / tidak benar-benar diperlukan.

The $terminator berguna ketika Anda ingin string pertandingan yang berakhir dengan cara tertentu , misalnya

rewrite ^/old-category/(.*)\.php$ /new-category/$1;

untuk menulis ulang hanya file PHP .

Adapun pertanyaan kedua Anda, jika saya mengerti dengan benar, Anda ingin mengarahkan ini

http://example.com/old-category/

untuk ini

http://example.com/new-category/

Jika demikian, itu sudah dilakukan oleh rewriteaturan, seperti .*mencocokkan dengan NOL atau lebih banyak karakter.

Tuan Shunz
sumber
3
Pertanyaan bagus, jawaban bagus. Begitu banyak orang menetapkan $ secara default (atau membiarkannya keluar secara default) tanpa memikirkan apa arti sebenarnya. Setiap kali saya melihat (. *) $ Saya merasa ngeri. Saya tidak mencobanya tetapi mungkin sebenarnya meninggalkan $ dalam kasus ini bisa memiliki kinerja yang sedikit lebih baik karena aturan lain regex harus memeriksa. Akan menarik untuk mendapatkan jawaban atas pertanyaan itu: D
Broco