Saya punya situs, berjalan di nginx. Saya perlu menulis ulang URL seperti ini:
domain.com/blabla/88-aaa-aaaaa-aaaa/qqqq-qqq11-2qq-qqq.html
untuk ini
domain.com/blabla/aaa-aaaaa-aaaa/qqqq-qqq11-2qq-qqq
itu berarti - menghapus nomor setelah garis miring, diikuti oleh tanda hubung, dan kemudian ekstensi ".html".
Untuk mencapainya, saya mencoba menggunakan
location ~* \/[0-9]{1,4}(-.*)(\.html)$ {
......
}
tetapi dalam tester lokasi, itu benar-benar mengabaikan tanda hubung, dan cocok .../88aaa...
, yang ingin saya hindari. Lalu saya membaca, bahwa jika ekspresi mengandung kurung kurawal, tanda kutip tunggal atau ganda harus digunakan di sekitar ekspresi. Jadi saya mencoba ini
location ~* "\/[0-9]{1,4}(-.*)(\.html)$" {
......
}
Masih tidak berhasil ... Dengan kutipan, gagal mencocokkan lokasi dalam kedua kasus. Bisakah seseorang tolong?
/
tidak perlu melarikan diri. Selamat mencoba dengan:location ~* /[0-9]{1,4}(-.*\.html)$ {
nginx
tidak akan dimulai ulang dalam upaya pertama Anda (tanpa tanda kutip) - masih akan menjalankan konfigurasi sebelumnya. Upaya kedua (dengan kutipan, dengan atau tanpa back-slash palsu) bekerja untuk saya. Apa yang terjadi di dalamlocation
blok?Jawaban:
Solusi yang akhirnya saya gunakan untuk masalah khusus ini dengan lokasi, yang mengandung kurung kurawal adalah untuk menghindarinya, dan ulangi blok lokasi untuk setiap kemungkinan kombinasi. Itu berarti
untuk ... / 8 -.... html
untuk ... / 88 -.... html
untuk ... / 888 -.... html dll.
sumber
Anda dapat menyederhanakannya dengan
+
yang berarti "setidaknya satu dari ini"location ~* /[0-9]+(-.*)(\.html)$ {
sumber