Buat pengalihan dan tulis semula peraturan ke dalam .Htaccess di webserver Apache

Buat pengalihan dan tulis semula peraturan ke dalam .Htaccess di webserver Apache

Semasa menggunakan pelayan web Apache, .Htaccess Fail (juga dikenali sebagai "fail konfigurasi yang diedarkan") digunakan untuk menentukan konfigurasi secara per direktori, atau lebih umum untuk mengubah suai tingkah laku pelayan web Apache tanpa perlu mengakses fail tuan rumah maya secara langsung (ini biasanya mustahil sebagai contoh, pada tuan rumah bersama). Dalam tutorial ini kita melihat bagaimana kita dapat menubuhkan pengalihan URL dan menulis semula peraturan di dalamnya .Htaccess fail.

Dalam tutorial ini anda akan belajar:

  • Bagaimana .Fail htaccess berfungsi
  • Cara Menyiapkan Peraturan Penulisan URL Di .fail htaccess menggunakan Penulisan semula arahan
  • Cara Menyediakan Peraturan Pengalihan URL Di .fail htaccess menggunakan Redirect dan RedirectMatch arahan
Buat pengalihan dan tulis semula peraturan ke dalam .Htaccess di webserver Apache

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran bebas
Perisian Pelayan web Apache
Yang lain Tiada keperluan lain yang diperlukan
Konvensyen # - Memerlukan komando linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-memerlukan komando Linux yang diberikan sebagai pengguna yang tidak berkadar biasa

Sekiranya anda menggunakan .Htaccess Files?

Seperti yang telah kita sebutkan, penggunaan .Htaccess Fail tidak disyorkan jika anda boleh beroperasi pada fail konfigurasi host maya secara langsung, kerana ia melambatkan pelayan web Apache (ketika Allowoverride Arahan digunakan untuk membenarkan penggunaan .Htaccess fail, pelayan web mengimbas setiap direktori mencari mereka). Walau bagaimanapun, dalam beberapa situasi, penggunaan .Htaccess Fail adalah satu -satunya penyelesaian.

Set arahan yang boleh digunakan dalam .Htaccess fail ditubuhkan di konfigurasi tapak utama melalui Allowoverride arahan, di dalam a rangkap; Sebagai contoh, untuk membolehkan penggunaan semua arahan yang mungkin kita akan menulis sesuatu seperti:

 Allowoverride semua  

Arahan akan digunakan untuk .Htaccess fail yang terdapat dalam direktori yang ditentukan dan semua subdirektorinya.

Untuk arahan yang akan kami gunakan dalam tutorial ini untuk berfungsi, mod_alias dan mod_rewrite Modul Apache mesti diaktifkan.

Pengalihan (mod_alias)

Seperti yang dinyatakan sebelum ini, di kami .Htaccess Fail Kami mungkin mahu menentukan beberapa peraturan pengalihan, supaya apabila URL diminta, pelanggan diarahkan ke yang lain.

Pada dasarnya kami mempunyai dua cara untuk melaksanakan operasi: menggunakan Redirect atau RedirectMatch arahan. Apakah perbezaan antara keduanya? Bekas LET KAMI MEMBUAT REALIRICE berdasarkan perlawanan URL biasa dan mudah; Yang pertama pada dasarnya tidak sama tetapi lebih kuat, kerana dengan itu kita boleh menggunakan ungkapan biasa.

Arahan "Redirect"

Mari lihat beberapa contoh penggunaan Redirect arahan. Katakan kami ingin mengalihkan keseluruhan laman web kami:

Redirect 301/https: // url/to/redirect/to 


Yang di atas adalah contoh yang cukup "melampau". Mari analisis sintaks. Sebagai perkara pertama yang kami tentukan arahan: Redirect.

Perkara kedua yang kami berikan ialah kod HTTP yang akan digunakan untuk pengalihan: ini boleh disediakan sama ada sebagai status berangka atau dalam bentuk rentetan.
Beberapa contoh:

Kod HTTP Kata kunci
301 kekal
302 temp
303 melihat
410 Pergi

Dalam contoh sebelumnya kita mengkonfigurasi a kekal pengalihan semula sejak kami menggunakan 301 Kod HTTP. Setara dengan itu:

Redirect kekal/https: // url/to/redirect/to 

Jenis pengalihan boleh ditinggalkan sama sekali: apabila ia berlaku, 302 kod (pengalihan sementara) ia digunakan secara lalai.

Hujah ketiga yang kami berikan dalam peraturan adalah mutlak jalan sumber "asal" yang harus dipadankan. Dalam kes ini kita gunakan / yang merupakan akar tapak, kerana kita mahu mengalihkannya sepenuhnya. Di sini skim dan Tuan rumah sebahagian daripada URL mesti ditinggalkan.

Hujah keempat adalah url "baru" pengguna harus dialihkan ke. Dalam kes ini, seperti yang kita lakukan dalam contoh di atas, kita boleh menggunakan URL lengkap, termasuk skim dan Tuan rumah, atau menghilangkannya dan hanya menggunakan jalan: dalam kes yang kedua, ia akan dianggap sebagai sebahagian daripada laman asal yang sama. Hujah ini wajib jika status pengalihan ditentukan antara 301 dan 399, tetapi ia mesti ditinggalkan Sekiranya status yang disediakan tidak berada dalam julat itu. Ini masuk akal: bayangkan kita menggunakan a 410 status untuk memberi isyarat bahawa sumbernya hilang: tidak masuk akal untuk menentukan url pengalihan. Dalam hal ini kita hanya akan menulis:

Redirect 410/Path/of/Sumber 


Arahan "RedirectMatch"

Dengan arahan "Redirect" kita dapat menentukan jalan URL untuk diarahkan, tetapi ia mesti sepadan dengan jelas dan mudah, seperti yang dinyatakan. Bagaimana jika kita mahu melakukan sesuatu yang lebih kompleks, sebagai contoh untuk mengalihkan permintaan untuk semua fail dengan .html sambungan? Dalam kes tersebut, kita boleh menggunakan RedirectMatch arahan, dan gunakan a ekspresi biasa. Mari lihat contoh:

RedirectMatch 301 (.*) \.html $ $ 1.php 

Dalam contoh di atas, kami mengalihkan semua permintaan untuk .html fail di laman web kami ke fail dengan nama dan laluan yang sama, tetapi dengan .php sambungan. Mari kita menganalisis peraturan.

Seperti biasa perkara pertama yang kami berikan adalah arahan, dalam kes ini RedirectMatch. Selepas itu, seperti yang kami lakukan sebelum ini, kami menyediakan kod HTTP untuk digunakan untuk pengalihan semula; Kemudian, dan ini adalah perkara yang menarik, kami menggunakan (.*) \.html $ ekspresi biasa.

Kepada anda yang sudah biasa regex Ini harus segera jelas, tetapi mari kita lihat bagaimana ia berfungsi: . (titik) dalam ungkapan biasa sepadan dengan semua aksara: diikuti oleh * yang menegaskan bahawa ungkapan sebelumnya harus dipadankan 0 atau lebih kali. Ungkapan ini dilampirkan dalam kurungan, jadi ia dikelompokkan, dan bahagian URL yang sepadan dapat dirujuk kemudian melalui $ 1 Variabel (pelbagai kumpulan boleh digunakan - mereka 'dinamakan' secara progresif, jadi contohnya untuk memadankan kumpulan kedua yang boleh kita gunakan $ 2). Selepas bahagian ungkapan yang tertutup dalam kurungan, kami menyatakan bahawa jalan harus berakhir .html: anda dapat melihat kami melarikan diri . dengan backslash untuknya
dipadankan secara literal. Akhirnya kami menggunakan $ untuk memadankan akhir garis.

Sebagai hujah untuk URL pengalihan yang kami gunakan $ 1.php. Seperti yang telah kita jelaskan $ 1 digunakan untuk merujuk bahagian URL yang sepadan dengan ungkapan biasa antara kurungan (yang merupakan jalan lengkap tolak .html sambungan), jadi apa yang kita lakukan di sini pada dasarnya menggunakan jalan yang sama tetapi dengan .php sambungan.

URL Rewriting (mod_rewrite)

Peraturan penulisan semula URL boleh kedua -duanya telus atau dapat dilihat oleh pengguna. Dalam kes pertama pengguna meminta halaman, dan pelayan, secara dalaman, menerjemahkan permintaan di dasar peraturan yang disediakan untuk melayani sumber: Pengguna tidak melihat apa yang berlaku, kerana URL dalam penyemak imbasnya tidak t berubah. Dalam kes kedua, sebaliknya, kami praktikal mencapai pengalihan lengkap yang dapat dilihat oleh pengguna.

Mari kita mulakan dengan kes pertama. Sekiranya kita mahu menggunakan penulisan semula URL, perkara pertama yang perlu kita lakukan (dalam kes ini dalam kita .Htaccess fail) adalah menulis arahan berikut:

Menulis semula 

The RewriteEngine Arahan, seperti namanya, diperlukan untuk mengubah keadaan enjin penulisan semula Apache. Dalam contoh di atas, kami membolehkannya; Untuk melumpuhkannya, sebaliknya kita mesti menulis:

Tulis semula 


Sama seperti contoh, katakan kita mempunyai sumber yang dipanggil halaman.html Di pelayan kami, yang digunakan untuk dicapai oleh URL biasa dan mudah: http: // localhost/halaman.html. Sekarang bayangkan bahawa atas sebab -sebab kami menamakan semula fail HTML, ke Newpage.html, Tetapi atas sebab -sebab yang jelas kami mahu pelanggan kami masih dapat mencapai sumber dengan URL lama (mungkin mereka telah menyimpannya dalam penanda halaman penyemak imbas mereka). Apa yang boleh kita lakukan ialah menulis perkara berikut, sangat
Peraturan Mudah:

RewriteEngine on Rewriterule ^Page \.HTML /Newpage.html 

Sintaks peraturan sangat serupa dengan yang kami gunakan untuk RedirectMatch Arahan: Pertama kita mempunyai arahan itu sendiri, Penulisan semula, daripada kita mempunyai corak digunakan untuk padanan URL: ia mestilah regex. Selepas itu, kami mempunyai penggantian rentetan, yang digunakan untuk mengganti url asal.

Terdapat elemen keempat yang boleh digunakan dalam definisi a Penulisan semula adalah bendera, yang digunakan untuk mengubah suai tingkah laku pelayan web apabila peraturan tertentu dipadankan.

Mari kita lihat contoh: dengan peraturan yang kita tetapkan di atas, seperti yang telah kita katakan, tidak ada pengalihan yang berlaku: URL di bar alamat penyemak imbas tidak berubah. Sekiranya kita mahu pengalihan berlaku, kita perlu menambah R bendera ke ungkapan:

RewriteEngine on Rewriterule ^Page \.HTML /Newpage.html [r] 

Bendera disediakan antara kurungan: dalam kes tertentu ini R Bendera menyebabkan peraturan itu ditafsirkan sebagai pengalihan. Malah mungkin untuk menentukan jenis pengalihan yang harus berlaku, dengan menyatakan kod HTTP yang berkaitan, sebagai contoh:

Penulisan semula ^halaman \.HTML /Newpage.html [r = 301] 

Satu lagi perkara biasa yang digunakan semula oleh URL, adalah untuk "mencantikkan" URL, untuk tujuan SEO. Katakan, contohnya kita mempunyai skrip PHP yang diambil dari pangkalan data produk tertentu dengan ID disediakan sebagai parameter pertanyaan di
URL, sebagai contoh:

http: // localhost/produk.php?id = 1 

Untuk menjadikan sumber tersedia di http: // localhost/produk/1 URL, kita boleh menulis peraturan berikut:

RewriteEngine on Rewriterule ^Products /([0-9]+) $ /Produk.php?ID = $ 1 

Dengan [0-9] regex kita sepadan dengan semua digit, dan dengan + Kami mengatakan bahawa ungkapan sebelumnya mesti sepadan 1 atau lebih kali untuk peraturan yang akan dilaksanakan. Ekspresi yang dipadankan disertakan dalam kurungan, jadi kita dapat merujuk bahagian URL yang dipadankan dalam rentetan "destinasi", dengan menggunakan $ 1 pembolehubah. Dengan cara ini, ID produk yang kami sediakan dalam URL "Cantik", menjadi nilai dari ID pemboleh ubah dalam rentetan pertanyaan.

Menulis semula keadaan

Kami hanya melihat bagaimana, untuk peraturan menulis semula yang akan digunakan, ungkapan biasa mesti sepadan dengan url yang disediakan oleh pengguna. Dalam contoh terakhir kita melihat bagaimana http: // localhost/produk/1 URL boleh ditulis semula secara dalaman http: // localhost/produk.php?id = 1. Tetapi bagaimana jika jalan yang ditentukan oleh URL baru merujuk fail "sebenar" yang ada di pelayan? Bagaimana jika, sebagai contoh, /produk/1 adalah fail biasa, dan kami mahu ia disampaikan seperti itu? Dalam kes seperti ini kita boleh menggunakan Menulis semula arahan.

Dengan Menulis semula arahan, kami menentukan syarat yang harus dihormati untuk penulisan semula url. Dalam kes ini, sebagai contoh, kita mungkin mahu menegaskan bahawa jika produk/1 fail wujud di pelayan, pengalihan semula
tidak boleh berlaku. Kami akan menulis:

RewriteEngine on RewriteCond %request_filename !-F Rewriterule ^Products /([0-9]+) $ /Produk.php?ID = $ 1 

Kami menggunakan Menulis semula arahan, sebelum Penulisan semula. Perkara pertama yang kami lalui kepada arahan adalah rentetan ujian yang sepatutnya dipadankan. Dalam konteks ini kita boleh menggunakan siri pembolehubah pelayan yang telah ditetapkan, seperti %Request_filename:
ia merujuk Laluan sistem fail tempatan penuh ke fail atau skrip yang sepadan dengan permintaan.

Di sini kami tidak dapat memberikan senarai lengkap semua pembolehubah yang tersedia, yang dapat anda temui dengan melawat dokumentasi Apache Mod_Rewrite.

Selepas "rentetan ujian" kami menentukan keadaan yang sepadan: dalam kes ini kami gunakan !-f Untuk menentukan bahawa untuk URL menulis semula untuk digunakan, fail atau skrip yang sepadan dengan permintaan tidak boleh menjadi fail biasa yang ada di pelayan (-f sepadan dengan fail biasa, dan ! membalikkan hasilnya).

Yang di atas, adalah contoh yang sangat mudah dari a Menulis semula Arahan: Lebih dari satu dapat disediakan sebelum Penulisan semula Arahan: semuanya sepadan dengan yang akan digunakan.

Kesimpulan

Dalam artikel ini kita melihat bagaimana kita dapat menentukan pengalihan URL dan peraturan penulisan semula URL .Htaccess fail semasa menggunakan pelayan web Apache. Kami melihat beberapa contoh penggunaan yang sangat mudah Redirect, RedirectMatch dan Penulisan semula arahan dan bagaimana kita boleh menggunakannya untuk mencapai tingkah laku tertentu. Ini dimaksudkan sebagai pengenalan kepada subjek tersebut, jadi sila lihat halaman dokumentasi rasmi untuk mod_alias dan modul mod_rewrite untuk pengetahuan yang lebih mendalam.

Tutorial Linux Berkaitan:

  • Persediaan Htaccess OpenLitespeed
  • Membolehkan .htaccess pada pelayan Apache 2 linux
  • Cara menguruskan tuan rumah maya yang dinamik dengan Apache dan ..
  • Cara Memindahkan Apache ke Nginx dengan Menukar Virtualhosts ke ..
  • APACHE IP dan Nama Berdasarkan Hos Maya Maya dijelaskan
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Cara Menggunakan Apache Untuk Mengalihkan Semua Lalu Lintas Dari HTTP ke HTTPS
  • Cara Menyiapkan VSFTPD di Debian
  • Menguasai Gelung Skrip Bash
  • Linux Apache Log Analyzer