regex lokasi nginx dengan kurung kurawal dan kutipan tidak berfungsi


1

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?


Saya tidak tahu nginx, tapi saya tahu sedikit tentang ekspresi reguler. Apakah Anda yakin perlu garis miring terbalik sebelum tanda hubung? Biasanya dasbor tidak istimewa kecuali di dalam kurung.
Scott

1
@ Hemat, tidak terlalu :) Saya pikir saya harus menghindarinya. Hanya mencobanya di regex tester dan diverifikasi, bahwa itu tidak diperlukan. Terima kasih atas petunjuknya
j.kaspar

/tidak perlu melarikan diri. Selamat mencoba dengan:location ~* /[0-9]{1,4}(-.*\.html)$ {
Toto

@Toto terima kasih. Saya perlu mencocokkan nomor hanya dengan segera setelah tebasan, itu sebabnya saya membuatnya. Ngomong-ngomong, saya mencoba saran Anda, tetapi perilaku sayangnya tetap sama
j.kaspar

1
nginxtidak 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 dalam locationblok?
Richard Smith

Jawaban:


0

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

location ~* /[0-9](-.*)(\.html)$ {

untuk ... / 8 -.... html

location ~* /[0-9][0-9](-.*)(\.html)$ {

untuk ... / 88 -.... html

location ~* /[0-9][0-9][0-9](-.*)(\.html)$ {

untuk ... / 888 -.... html dll.


0

Anda dapat menyederhanakannya dengan +yang berarti "setidaknya satu dari ini"

location ~* /[0-9]+(-.*)(\.html)$ {

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.