Buat redirect dan tulis ulang aturan ke .htaccess pada server web apache

Buat redirect dan tulis ulang aturan ke .htaccess pada server web apache

Saat menggunakan server web Apache, .htaccess File (juga disebut “File Konfigurasi Terdistribusi”) digunakan untuk menentukan konfigurasi berdasarkan per-direktori, atau lebih umum untuk memodifikasi perilaku server web Apache tanpa harus mengakses file host virtual secara langsung (ini biasanya tidak mungkin misalnya, pada host bersama). Dalam tutorial ini kita melihat bagaimana kita dapat membuat pengalihan URL dan aturan penulisan ulang di dalamnya .htaccess file.

Dalam tutorial ini Anda akan belajar:

  • Bagaimana .file htaccess berfungsi
  • Cara mengatur aturan penulisan ulang URL .file htaccess menggunakan Penulisan ulang pengarahan
  • Cara mengatur aturan pengalihan URL .file htaccess menggunakan Redirect Dan Redirectmatch arahan
Buat redirect dan tulis ulang aturan ke .htaccess pada server web apache

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Independen
Perangkat lunak Server Web Apache
Lainnya Tidak ada persyaratan lain yang diperlukan
Konvensi # - mensyaratkan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mensyaratkan Linux-Commands untuk dieksekusi sebagai pengguna reguler yang tidak istimewa

Harus Anda gunakan .file htaccess?

Seperti yang telah kami sebutkan, penggunaan .htaccess File tidak disarankan jika Anda dapat beroperasi pada file konfigurasi host virtual secara langsung, karena memperlambat server web apache (saat Alloverride Petunjuk digunakan untuk memungkinkan penggunaan .htaccess File, server web memindai setiap direktori yang mencarinya). Namun, dalam beberapa situasi, penggunaannya .htaccess File adalah satu -satunya solusi.

Himpunan arahan yang dapat digunakan di .htaccess File ditetapkan dalam konfigurasi situs utama melalui Alloverride Petunjuk, di dalam a bait; Misalnya, untuk memungkinkan penggunaan semua arahan yang mungkin, kami akan menulis sesuatu seperti:

 Alloverride semua  

Instruksi akan diterapkan .htaccess file yang ditemukan di direktori yang ditentukan dan semua subdirektorinya.

Untuk arahan yang akan kami gunakan dalam tutorial ini untuk bekerja, mod_alias Dan mod_rewrite Modul apache harus diaktifkan.

Pengalihan (mod_alias)

Seperti yang ditentukan sebelumnya, di kami .htaccess file yang mungkin ingin kami tentukan beberapa aturan pengalihan, sehingga ketika URL diminta, klien dialihkan ke yang lain.

Kami pada dasarnya memiliki dua cara untuk melakukan operasi: menggunakan Redirect atau Redirectmatch arahan. Apa perbedaan antara keduanya? Yang pertama mari kita membuat pengalihan berdasarkan kecocokan URL polos dan sederhana; Yang pertama pada dasarnya melakukan hal yang sama tetapi lebih kuat, karena dengan itu dapat kita gunakan Ekspresi reguler.

Petunjuk "Redirect"

Mari kita lihat beberapa contoh penggunaan Redirect pengarahan. Misalkan kami ingin mengarahkan seluruh situs kami:

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


Yang di atas adalah contoh yang cukup "ekstrem". Mari kita analisis sintaksis. Sebagai hal pertama kami menentukan arahan: Redirect.

Hal kedua yang kami berikan adalah kode HTTP yang akan digunakan untuk pengalihan: Ini dapat disediakan baik sebagai status numerik atau dalam bentuk string.
Beberapa contoh:

Kode http Kata kunci
301 permanen
302 suhu
303 seeother
410 hilang

Dalam contoh sebelumnya kami mengonfigurasi a permanen pengalihan sejak kami menggunakan 301 Kode http. Yang setara dengan itu adalah:

Redirect Permanen/https: // url/to/redirect/to 

Jenis pengalihan dapat dihilangkan sama sekali: ketika itu terjadi, 302 kode (pengalihan sementara) digunakan secara default.

Argumen ketiga yang kami berikan dalam aturan adalah mutlak jalur sumber daya "asli" yang harus dicocokkan. Dalam hal ini kami menggunakan / yang merupakan akar dari situs ini, karena kami ingin mengarahkan ulang sepenuhnya. Di sini skema Dan tuan rumah bagian dari URL harus dihilangkan.

Argumen keempat adalah URL "baru" yang harus dialihkan oleh pengguna. Dalam hal ini, seperti yang kami lakukan dalam contoh di atas, kami dapat menggunakan URL lengkap, termasuk skema Dan tuan rumah, atau menghilangkannya dan menggunakan hanya jalan: dalam kasus terakhir, itu akan dianggap sebagai bagian dari situs asli yang sama. Argumen ini wajib jika status pengalihan yang ditentukan adalah antara 301 Dan 399, tetapi harus dihilangkan Jika status yang disediakan tidak dalam kisaran itu. Ini masuk akal: bayangkan kita menggunakan a 410 Status untuk menandakan bahwa sumber daya hilang: tidak masuk akal untuk menentukan URL pengalihan. Dalam hal ini kami hanya akan menulis:

Redirect 410/path/of/sumber daya 


Petunjuk "RedirectMatch"

Dengan arahan "Redirect" kita dapat menentukan jalur URL yang akan dialihkan, tetapi harus cocok dengan polos dan sederhana, seperti yang ditentukan. Bagaimana jika kita ingin melakukan sesuatu yang lebih kompleks, seperti misalnya untuk mengarahkan kembali permintaan untuk semua file dengan .html perpanjangan? Dalam kasus tersebut, kita dapat menggunakan Redirectmatch arahan, dan gunakan a ekspresi reguler. Mari kita lihat contoh:

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

Dalam contoh di atas kami mengarahkan semua permintaan .html file di situs kami ke file dengan nama dan jalur yang sama, tetapi dengan .php perpanjangan. Mari kita analisis aturannya.

Seperti biasa, hal pertama yang kami berikan adalah arahan, dalam hal ini Redirectmatch. Setelah itu, seperti yang kami lakukan sebelumnya, kami menyediakan kode HTTP untuk digunakan untuk pengalihan; Lalu, dan ini adalah hal yang menarik, kami menggunakan (.*) \.html $ ekspresi reguler.

Untuk Anda yang sudah terbiasa Regex Ini harus segera jelas, tetapi mari kita lihat cara kerjanya: . (titik) dalam ekspresi reguler cocok dengan semua karakter: diikuti oleh * yang menetapkan bahwa ungkapan sebelumnya harus dicocokkan 0 atau lebih kali. Ekspresi tertutup dalam tanda kurung, sehingga dikelompokkan, dan bagian dari URL yang cocok dengan yang dapat direferensikan nanti melalui $ 1 Variabel (banyak grup dapat digunakan - mereka 'dinamai' secara progresif, jadi misalnya untuk mencocokkan grup kedua yang dapat kita gunakan $ 2). Setelah bagian dari ekspresi yang tertutup dalam tanda kurung, kami menentukan bahwa jalur harus berakhir .html: Anda dapat melihat kami lolos . dengan backslash untuk itu
dicocokkan secara harfiah. Akhirnya kami menggunakan $ untuk mencocokkan ujung garis.

Sebagai argumen untuk URL pengalihan yang kami gunakan $ 1.php. Seperti yang sudah kami jelaskan $ 1 digunakan untuk merujuk bagian dari URL yang cocok dengan ekspresi reguler antara tanda kurung (yang merupakan jalur lengkap dikurangi .html ekstensi), jadi apa yang kami lakukan di sini pada dasarnya menggunakan jalur yang sama tetapi dengan .php perpanjangan.

Penulisan ulang URL (mod_rewrite)

Aturan penulisan ulang URL bisa menjadi keduanya transparan atau terlihat oleh pengguna. Dalam kasus pertama, pengguna meminta halaman, dan server, secara internal, menerjemahkan permintaan pada pangkalan aturan yang disediakan untuk melayani sumber daya: pengguna tidak memperhatikan apa yang terjadi, karena URL di browsernya tidak t berubah. Dalam kasus kedua, sebaliknya, kami secara praktis mencapai pengalihan lengkap yang terlihat oleh pengguna.

Mari kita mulai dengan kasus pertama. Jika kami ingin menggunakan penulisan ulang URL, hal pertama yang harus kami lakukan (dalam hal ini di kami .htaccess file) adalah untuk menulis arahan berikut:

Menulis ulang 

Itu Penulisan ulang Petunjuk, seperti namanya, diperlukan untuk memodifikasi status mesin penulisan ulang Apache. Dalam contoh di atas, kami mengaktifkannya; Untuk menonaktifkannya, sebaliknya kita harus menulis:

Menulis ulang 


Sama seperti sebuah contoh, misalkan kita memiliki sumber daya yang disebut halaman.html Di server kami, yang dulu dicapai oleh URL polos dan sederhana: http: // localhost/page.html. Sekarang bayangkan karena beberapa alasan kami mengganti nama file HTML, menjadi lembaran baru.html, Tetapi untuk alasan yang jelas kami ingin klien kami masih dapat mencapai sumber daya dengan URL lama (mungkin mereka telah menyimpannya di bookmark browser mereka). Yang bisa kami lakukan adalah menulis yang berikut, sangat
Aturan Sederhana:

Menulis ulang pada penulisan ulang ^halaman \.html /newPage.html 

Sintaks aturan ini sangat mirip dengan yang kami gunakan untuk Redirectmatch Petunjuk: Pertama kita memiliki arahan itu sendiri, Penulisan ulang, daripada yang kita miliki pola Dulu untuk pencocokan URL: harus a Regex. Setelah itu, kami memiliki pengganti string, yang digunakan untuk menggantikan URL asli.

Ada elemen keempat yang dapat digunakan dalam definisi a Penulisan ulang adalah bendera, yang digunakan untuk memodifikasi perilaku server web saat aturan tertentu dicocokkan.

Mari kita lihat contoh: Dengan aturan yang kita tetapkan di atas, seperti yang sudah kita katakan, tidak ada pengalihan terjadi: URL di bilah alamat browser tidak berubah. Jika kita ingin pengalihan terjadi, kita harus menambahkan R Bendera ke ekspresi:

Menulis ulang pada penulisan ulang ^halaman \.html /newPage.html [r] 

Bendera disediakan di antara tanda kurung: dalam kasus khusus ini R Bendera menyebabkan aturan ditafsirkan sebagai pengalihan. Bahkan mungkin untuk menentukan jenis pengalihan yang harus terjadi, dengan menentukan kode HTTP terkait, misalnya:

Penulisan ulang ^halaman \.html /newPage.html [r = 301] 

Hal -hal umum lainnya yang digunakan oleh penulisan ulang URL, adalah untuk "mempercantik" URL, untuk tujuan SEO. Katakanlah, misalnya kita memiliki skrip PHP yang mengambil dari database produk tertentu dengan itu pengenal disediakan sebagai parameter kueri di
URL, misalnya:

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

Untuk menyediakan sumber daya di http: // localhost/produk/1 URL, kita bisa menulis aturan berikut:

Penulisan ulang pada penulisan ulang ^Produk /([0-9]+) $ /Produk.php?id = $ 1 

Dengan [0-9] regex kami cocok dengan semua digit, dan dengan + Kami mengatakan bahwa ungkapan sebelumnya harus cocok 1 kali atau lebih agar aturan tersebut dieksekusi. Ekspresi yang cocok dilampirkan dalam tanda kurung, sehingga kami dapat merujuk bagian yang cocok dari URL dalam string "tujuan", dengan menggunakan $ 1 variabel. Dengan cara ini, ID produk yang kami sediakan dalam URL "dipercantik", menjadi nilai dari pengenal variabel dalam string kueri.

Menulis ulang kondisi

Kami baru saja melihat bagaimana, agar aturan penulisan ulang diterapkan, ekspresi reguler harus cocok dengan URL yang disediakan oleh pengguna. Dalam contoh terakhir kita melihat bagaimana http: // localhost/produk/1 URL dapat ditulis ulang secara internal http: // localhost/produk.php?ID = 1. Tetapi bagaimana jika jalur yang ditentukan oleh URL baru merujuk file "nyata" yang ada di server? Bagaimana jika, misalnya, /Produk/1 adalah file biasa, dan kami ingin disajikan sebagaimana adanya? Dalam kasus seperti ini kita dapat menggunakan REWRITECOND pengarahan.

Dengan REWRITECOND Petunjuk, kami menentukan kondisi yang harus dihormati untuk penulisan ulang URL terjadi. Dalam hal ini, misalnya, kami mungkin ingin menetapkan bahwa jika Produk/1 File ada di server, pengalihan
seharusnya tidak terjadi. Kami akan menulis:

REWRITEEngine di REWRITECOND %request_filename !-f Writerule ^Produk /([0-9]+) $ /Produk.php?id = $ 1 

Kami menggunakan REWRITECOND arahan, sebelum Penulisan ulang. Hal pertama yang kami berikan ke Petunjuk adalah string uji yang harus dicocokkan. Dalam konteks ini kita dapat menggunakan serangkaian variabel server yang telah ditentukan, seperti %Request_filename:
itu referensi Jalur sistem file lokal lengkap ke file atau skrip yang cocok dengan permintaan.

Di sini kami tidak dapat memberikan daftar lengkap semua variabel yang tersedia, yang dapat Anda temukan dengan mengunjungi dokumentasi Apache Mod_Rewrite.

Setelah "string uji" kami menentukan kondisi yang harus dicocokkan: dalam hal ini kami menggunakan !-F Untuk menentukan bahwa agar URL penulisan ulang diterapkan, file atau skrip yang cocok dengan permintaan tidak boleh menjadi file biasa yang ada di server (-F cocok dengan file biasa, dan ! membalik hasilnya).

Yang di atas, adalah contoh yang sangat sederhana dari a REWRITECOND Petunjuk: Lebih dari satu dapat disediakan sebelum Penulisan ulang Petunjuk: semuanya harus cocok untuk yang terakhir diterapkan.

Kesimpulan

Dalam artikel ini kami melihat bagaimana kami dapat menentukan pengalihan URL dan aturan penulisan ulang URL .htaccess file saat menggunakan server web apache. Kami melihat beberapa contoh yang sangat mudah dari penggunaan Redirect, Redirectmatch Dan Penulisan ulang arahan dan bagaimana kita dapat menggunakannya untuk mencapai perilaku tertentu. Ini dimaksudkan sebagai pengantar subjek tersebut, jadi silakan lihat halaman dokumentasi resmi untuk modul mod_rewrite Mod_R_REWRITE untuk pengetahuan yang lebih mendalam.

Tutorial Linux Terkait:

  • Pengaturan HtAccess OpenLitespeed
  • Memungkinkan .htaccess di server Apache 2 linux
  • Cara mengelola host virtual dinamis dengan Apache dan…
  • Cara memigrasikan Apache ke nginx dengan mengonversi virtualhosts ke ..
  • Apache IP dan host virtual berbasis nama dijelaskan
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Cara menggunakan Apache untuk mengarahkan semua lalu lintas dari HTTP ke HTTPS
  • Cara mengatur vsftpd di debian
  • Menguasai loop skrip bash
  • Linux Apache Log Analyzer