Nginx

Cara Menggunakan Penulisan Semula URL

Cara Menggunakan Penulisan Semula URL
Penulisan Semula URL adalah proses mengubah URL permintaan menjadi sesuatu yang lain seperti yang ditentukan dalam pelayan web. Nginx menggunakan modul ngx_http_rewrite_module, yang terutama menggunakan arahan kembali, menulis semula untuk tujuan menulis semula. Selain arahan yang ditentukan dalam modul ini, arahan peta, yang ditentukan dalam ngx_http_map_module, juga dapat digunakan untuk menulis ulang URL dengan mudah. Panduan ini bermaksud menerangkan mengenai 2 arahan utama - pengembalian, penulisan semula, dan bendera mereka, cara kerjanya, dan aplikasinya.

Prasyarat

Panduan ini dioptimumkan untuk Nginx 1.0.1 ke atas, dan dengan itu sangat disyorkan untuk mengemas kini contoh Nginx yang ada ke versi yang disebutkan di atas atau di atas. Walau bagaimanapun, beberapa perintah, sintaks mungkin masih berfungsi untuk versi apa pun sebelum versi tersebut di atas. Oleh kerana panduan ini adalah mengenai penulisan semula URL, yang merupakan topik yang agak maju, ia menganggap penonton mengetahui prosedur pemasangan Nginx, dan oleh itu tidak dijelaskan di sini.

Kembali

Return adalah arahan asas yang melakukan penulisan semula URL dan mudah difahami. Ia tidak menggunakan ungkapan biasa, tetapi boleh merangkumi pemboleh ubah untuk dihuraikan, diambil dari jalan blok lokasi. Biasanya, arahan pengembalian digunakan untuk mengalihkan URL permintaan ke lokasi yang berbeza, dan oleh itu ia sering menggunakan kod HTTP seperti 301 untuk pengalihan kekal, dan 302 untuk pengalihan sementara. Coretan kod berikut menunjukkan beberapa kes penggunaan arahan pengembalian.

Coretan kod berikut mengalihkan URL permintaan ke Google.com. Ia dapat digunakan sama ada secara langsung di bawah blok kod pelayan atau di bawah blok kod lokasi, tetapi pastikan untuk tidak mengalihkan ke domain yang sama untuk mengelakkan gelung pengalihan

pulangkan 301 https: // google.com;

Coretan kod berikut mengalihkan URL permintaan ke Nucuta.com bersama dengan jalan, misalnya contoh di atas tidak mengandung jalur, parameter, dan oleh itu tidak kira URL mana yang diketik di bar alamat, permintaan tersebut diarahkan ke domain root Google, sedangkan dalam contoh berikut, jalan, bersama dengan parameter dibawa tanpa nama domain. Sebagai alternatif, $ is_args $ args dapat digunakan, tetapi sebagai ganti $ request_uri, pemboleh ubah $ uri harus digunakan kerana $ request_uri juga mengandungi parameter URL. Sekiranya syaratnya adalah mengarahkan ke direktori lain dari domain yang sama, maka gunakan pemboleh ubah $ host dan bukannya nama domain sebagai arahan pengembalian, misalnya dalam contoh berikut dan bukan nucuta.com, gunakan $ host.

pulangkan 301 https: // nucuta.com $ request_uri;

Coretan kod berikut mengalihkan permintaan masuk ke direktori jalan dari domain yang sama, dan skema, yang bermaksud jika potongan kode berikut digunakan dalam http: // Linux.com, dan jika pengunjung mengajukan permintaan kepadanya, itu diarahkan ke direktori jalan, dan oleh itu potongan kode berikut berguna ketika menguruskan sebilangan besar laman web. Di sini $ skema mendefinisikan protokol URL, seperti FTP, HTTP, HTTPS, dan $ host menentukan domain pelayan semasa dengan pelanjutan domainnya, seperti Google.com, Linux.Bersih dll. Oleh kerana ini tidak melakukan pengalihan protokol, seperti dari HTTP ke HTTP, itu harus dilakukan secara manual seperti pada contoh kedua.

pulangkan skema $ 301: // $ host / jalan;
jika ($ skema != "https")
pulangkan 301 https: // $ host $ request_uri;

Arahan penggunaan berguna arahan pengembalian lain adalah kemampuan untuk memasukkan pemboleh ubah regex, tetapi untuk itu ungkapan biasa harus ditentukan di blok lokasi, dan harus menangkap pola, maka corak yang diambil dapat digabungkan dengan URL yang ada dalam arahan kembali untuk tujuan pengalihan, misalnya dalam contoh berikut, ketika permintaan dibuat untuk mengakses file teks, ia menangkap nama file teks di blok lokasi, kemudian meneruskan nama itu ke arahan pengembalian, kemudian arahan kembali menggabungkannya dengan yang ada URL untuk mengalihkan permintaan ke direktori lain.

lokasi ~ * ^ / ([^ /]+.txt) $
pulangan 301 / chrome / $ 1;

Tulis semula

Rewrite adalah arahan yang digunakan untuk menulis semula URL secara dalaman di pelayan web tanpa mendedahkan mekanisme yang mendasari kepada pihak pelanggan. Sesuai sintaksnya, ia digunakan dengan ungkapan biasa. Sintaks asasnya seperti berikut. Placeholder regex adalah untuk menggunakan ungkapan biasa, placeholder pengganti adalah untuk mengganti URL yang sesuai, sedangkan bendera untuk memanipulasi aliran pelaksanaan. Pada masa ini, bendera yang digunakan dalam arahan menulis semula adalah pemecahan, kekal, pengalihan dan terakhir.

tulis semula penggantian regex [bendera];

Sebelum meneruskan ungkapan biasa, penggantian, penangkapan corak, dan pemboleh ubah, penting untuk mengetahui bagaimana bendera menjadikan enjin dalaman Nginx berperilaku. Ada empat bendera utama yang digunakan dengan arahan menulis semula seperti yang dijelaskan sebelumnya, di antaranya bendera tetap, pengalihan dapat dipasangkan bersama-sama kerana kedua-duanya melakukan fungsi yang sama, yang bermaksud pengalihan.

Ubah hala

Bendera pengalihan digunakan untuk memberi isyarat kepada penyemak imbas bahawa pengalihan sementara adalah sementara, yang juga berguna dalam perayap mesin pencari untuk mengenali halaman sementara dipindahkan dan akan dikembalikan di lokasi asalnya beberapa saat kemudian. Apabila halaman memberi isyarat 302, mesin pencari tidak membuat perubahan dalam pengindeksannya, dan oleh itu pengunjung masih melihat halaman asal dalam indeks mesin pencari ketika mencari, yang bermaksud halaman lama tidak dikeluarkan dan, sebagai tambahan, semua yang memenuhi syarat , seperti peringkat halaman, jus pautan tidak dihantar ke halaman baru.

lokasi /

tulis semula ^ http: // 155.138.XXX.Pengalihan XXX / laluan;

Kekal

Bendera kekal digunakan untuk memberi isyarat kepada penyemak imbas bahawa pengalihan semula kekal, yang juga berguna dalam perayap mesin pencari untuk mengenali halaman itu dipindahkan secara kekal dan TIDAK akan dikembalikan di lokasi asalnya beberapa waktu kemudian seperti dengan pindah sementara. Apabila halaman memberi isyarat 301, enjin carian membuat beberapa perubahan dalam pengindeksannya, dan oleh itu pengunjung melihat halaman baru dalam indeks mesin pencari dan bukannya halaman lama ketika mencari, yang bermaksud halaman lama diganti dengan halaman baru, sebagai tambahan, semua yang berkelayakan, seperti peringkat halaman, jus pautan dihantar ke halaman baru.

lokasi /

tulis semula ^ http: // 155.138.XXX.XXX / jalan kekal;

Ekspresi Biasa, Penangkapan Corak, dan Pemboleh ubah.

Nginx menggunakan ekspresi Biasa dengan arahan menulis semula, dan dengan itu mengetahui tentang ungkapan Biasa sangat berguna dalam segmen ini.  Terdapat pelbagai jenis ungkapan biasa, tetapi Nginx menggunakan Perl Compatible Regular Expressions aka PCRE. Mempunyai alat ujian ekspresi biasa berguna untuk memastikan corak bertulis benar-benar berfungsi sebelumnya menggunakannya dalam fail konfigurasi Nginx. Panduan ini mengesyorkan https: // regex101.com / sebagai alat, dan semua contoh berikut diuji dengan alat di atas secara menyeluruh.

Ungkapan Biasa

tulis semula ^ / fr / (.*) $ http: // nucuta.com / $ 1 kekal;

Pola khas arahan menulis semula seperti di atas, ia mengandungi arahan menulis semula pada awal, kemudian dengan spasi "pola" dalam ekspresi biasa, kemudian dengan ruang "penggantian", dan akhirnya "bendera". Arahan menulis semula boleh diletakkan di mana saja dalam kurungan pelayan, tetapi disarankan untuk menyimpannya setelah menentukan arahan mendengar, nama_pengguna, root, dan indeks. Apabila pelawat membuat permintaan ke pelayan, URL akan dikirimkan bersama dengan permintaan tersebut, maka jika URL dipadankan dengan pola ekspresi biasa yang ditentukan dalam arahan menulis ulang, ia ditulis semula berdasarkan penggantian, maka aliran pelaksanaan dimanipulasi berdasarkan di bendera.

Corak ungkapan biasa menggunakan tanda kurung untuk menunjukkan kumpulan, yang sub-string diekstrak dari URL setelah mencocokkan pola regex dengan URL permintaan, maka sub-string yang diambil dari URL ditugaskan ke pemboleh ubah di "Penggantian" arahan menulis semula. Sekiranya terdapat beberapa kumpulan yang dipadankan, sub-string dari setiap kumpulan yang dipadankan diberikan kepada pemboleh ubah dalam "penggantian" dalam urutan yang dapat dihitung, yang bermaksud sub-rentetan dari kumpulan yang dipadankan pertama ditugaskan ke pemboleh ubah pertama ($ 1), kumpulan yang dipadankan kedua ditugaskan untuk pemboleh ubah kedua ($ 2), dan seterusnya.

Dari 4 bendera, 2 bendera telah dijelaskan dalam panduan ini, bendera yang terakhir adalah yang terakhir, dan pecah. Sebelum memahami bagaimana bendera berfungsi, penting untuk memahami bagaimana enjin Nginx berkelakuan dengan menulis semula arahan. Apabila URL dihantar bersama permintaan, mesin Nginx cuba memadankannya dengan blok lokasi. Sama ada sesuai atau tidak, jika arahan seperti menulis semula, pengembalian disandarkan, ia dilaksanakan secara berurutan. Sekiranya URL yang dihantar dipadankan dengan corak arahan penulisan semula, mesin Nginx menjalankan keseluruhan fail konfigurasi, tidak kira di mana arahan menulis semula ditentukan sebagai gelung, sehingga URL yang baru ditulis semula sesuai dengan salah satu blok lokasi.

URL berikut digunakan sebagai demonstrasi untuk menjelaskan bagaimana kedua-dua bendera membuat aliran pelaksanaan mesin Nginx berkelakuan dengan arahan menulis semula. Tangkapan skrin berikut menggambarkan struktur fail pelayan web.

http: // 155.138.XXX.XXX / penyemak imbas / sampel.txt (URL dihantar sebagai permintaan)

Apabila Tiada Bendera Digunakan

Apabila tidak ada bendera yang digunakan, kedua-dua arahan menulis semula dilaksanakan secara berurutan; oleh itu URL pertama dalam senarai berikut berubah menjadi 2nd, maka 2nd URL berubah menjadi URL terakhir Jadi apabila sampel.fail txt dalam folder penyemak imbas diminta, pelayan web sebenarnya melayani sampel.fail txt di folder root. Oleh kerana penulisan semula URL diabstrak sepenuhnya dari penyemak imbas, ia tidak melihat perbezaan dalam penyampaian berbanding dengan arahan kembali yang menyatakan penyemak imbas sama ada permintaan itu diarahkan atau tidak dengan nombor HTTP.

  1. http: // 155.138.XXX.XXX / penyemak imbas / sampel.txt
  2. http: // 155.138.XXX.XXX / krom / sampel.txt
  3. http: // 155.138.XXX.XXX / sampel.txt
lokasi /

tulis semula ^ / penyemak imbas / (.*) $ / chrome / $ 1;
tulis semula ^ / chrome / (.*) $ / $ 1;
lokasi / krom
cuba_files $ uri $ uri / = 404;

Apabila Sama ada Rehat, atau Bendera Terakhir Ditentukan Di Luar Blok Lokasi

Apabila tanda rehat atau bendera terakhir ditentukan di luar blok lokasi, arahan penulisan semula setelah arahan penulisan semula yang sesuai tidak dihuraikan sama sekali, misalnya dalam contoh berikut URL permintaan ditulis semula ke 2nd satu dalam senarai berikut tanpa mengira bendera yang digunakan, dan itu sahaja.

  1. http: // 155.138.XXX.XXX / penyemak imbas / sampel.txt
  2. http: // 155.138.XXX.XXX / krom / sampel.txt
lokasi /

tulis semula ^ / penyemak imbas / (.*) $ / chrome / $ 1 terakhir; #pecah
tulis semula ^ / chrome / (.*) $ / $ 1 terakhir; #pecah
lokasi / krom
cuba_files $ uri $ uri / = 404;

Semasa Bendera Terakhir Digunakan Di Dalam Blok Lokasi

Apabila bendera terakhir digunakan di dalam blok lokasi, ia berhenti mengurai lagi arahan menulis semula di dalam blok lokasi tertentu dan menjunam ke blok lokasi penulisan semula seterusnya jika URL yang ditulis semula dipadankan dengan jalur blok lokasi itu, maka ia akan melaksanakan arahan menulis semula seterusnya di dalamnya.

  1. http: // 155.138.XXX.XXX / penyemak imbas / sampel.txt
  2. http: // 155.138.XXX.XXX / krom / sampel.txt
  3. http: // 155.138.XXX.XXX / sampel.txt
lokasi /
tulis semula ^ / penyemak imbas / (.*) $ / chrome / $ 1 terakhir;

lokasi / krom
tulis semula ^ / chrome / (.*) $ / $ 1 terakhir;
cuba_files $ uri $ uri / = 404;

Apabila Bendera Pecah Digunakan Di Dalam Blok Lokasi

Hancurkan bendera, di sisi lain, ketika berada di dalam blok lokasi, berhenti menguraikan arahan menulis semula, tidak kira di mana ia berada, apabila satu arahan penulisan semula dipadankan dengan URL permintaan, dan memberikan kandungan kepada pengguna.

lokasi /
tulis semula ^ / penyemak imbas / (.*) $ / chrome / $ 1 rehat;

lokasi / krom
tulis semula ^ / chrome / (.*) Rehat $ / $ 1;
cuba_files $ uri $ uri / = 404;

Kesimpulannya

Penulisan semula URL adalah proses menulis semula URL dalam pelayan web. Nginx menyediakan banyak arahan seperti arahan kembali, menulis semula, peta untuk memungkinkan. Panduan ini menunjukkan arahan pengembalian, dan penulisan semula, dan cara penggunaannya untuk menulis semula URL dengan mudah. Seperti yang ditunjukkan dalam contoh, arahan pengembalian sesuai untuk memberi isyarat kepada penyemak imbas, dan mesin pencari merayapi keberadaan halaman, sedangkan arahan menulis semula berguna dalam mengaburkan proses penulisan semula URL tanpa membiarkan penyemak imbas mengetahui apa yang sedang terjadi di belakang tabir. Ini cukup berguna dalam melayani kandungan melalui CDN, pelayan cache atau dari lokasi lain dalam rangkaian. Pengguna tidak pernah tahu dari mana sumbernya berasal kerana penyemak imbas hanya menunjukkan URL yang diberikan kepada mereka.

5 Produk Tetikus Komputer Ergonomik Teratas untuk Linux
Adakah penggunaan komputer yang berpanjangan menyebabkan rasa sakit di pergelangan tangan atau jari anda? Adakah anda mengalami sendi kaku dan selalu ...
Cara Mengubah Tetapan Tetikus dan Pad Sentuh Menggunakan Xinput di Linux
Sebilangan besar pengedaran Linux dihantar dengan perpustakaan "libinput" secara lalai untuk menangani peristiwa input pada sistem. Ia dapat memproses...
Buat semula butang tetikus anda secara berbeza untuk perisian yang berbeza dengan X-Mouse Button Control
Mungkin anda memerlukan alat yang dapat mengubah kawalan tetikus anda dengan setiap aplikasi yang anda gunakan. Sekiranya ini berlaku, anda boleh menc...