pengantar
Dalam tutorial ini, kami akan mengaktifkan dan mempelajari cara mengelola penulisan ulang URL menggunakan
mod_rewrite
modul Apache2 . Alat ini memungkinkan kami untuk menulis ulang URL dengan cara yang lebih bersih, menerjemahkan jalur yang dapat dibaca manusia menjadi string kueri ramah-kode.
Panduan ini dibagi menjadi dua bagian: yang pertama menyiapkan contoh aplikasi web dan yang kedua menjelaskan aturan penulisan ulang yang umum digunakan.
Prasyarat
Untuk mengikuti tutorial ini, Anda akan membutuhkan:
- Satu Ubuntu 14.04 Droplet segar
- Seorang pengguna non-root sudo, yang dapat Anda atur dengan mengikuti langkah 2 dan 3 dari tutorial ini
Langkah 1 - Memasang Apache
Pada langkah ini, kita akan menggunakan penginstal paket bawaan yang dipanggil
apt-get
. Ini menyederhanakan manajemen secara drastis dan memfasilitasi instalasi yang bersih.
Pertama, perbarui indeks paket sistem. Ini akan memastikan bahwa paket lama atau yang sudah usang tidak mengganggu pemasangan.
- sudo apt-get update
Apache2 adalah server HTTP yang disebutkan di atas dan yang paling umum digunakan di dunia. Untuk menginstalnya, jalankan yang berikut:
- sudo apt-get install apache2
Untuk informasi tentang perbedaan antara Nginx dan Apache2, dua server web open source paling populer, lihat artikel ini .
Langkah 2 - Mengaktifkan mod_rewrite
Sekarang, kita perlu mengaktifkan
mod_rewrite
.
- sudo a2enmod rewrite
Ini akan mengaktifkan modul atau memberi tahu Anda bahwa modul sudah berlaku. Untuk menerapkan perubahan ini, mulai ulang Apache.
- sudo service apache2 restart
Langkah 3 - Menyiapkan .htaccess
Di bagian ini, kita akan mengatur
.htaccess
file untuk manajemen aturan penulisan ulang yang lebih sederhana.
Sebuah
.htaccess
file yang memungkinkan kita untuk memodifikasi aturan penulisan ulang tanpa mengakses file konfigurasi server. Untuk alasan ini, .htaccess
sangat penting untuk keamanan aplikasi web Anda. Periode yang mendahului nama file memastikan bahwa file tersebut disembunyikan.
Kami perlu menyiapkan dan mengamankan beberapa pengaturan lagi sebelum kami dapat memulai.
Pertama, izinkan perubahan dalam
.htaccess
file. Buka file konfigurasi Apache standar menggunakan nano
atau editor teks favorit Anda.
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Di dalam file itu, Anda akan menemukan
<VirtualHost *:80>
blok pada baris 1. Di dalam blok itu, tambahkan blok berikut:
/etc/apache2/sites-available/default
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
File Anda sekarang harus sesuai dengan yang berikut. Pastikan bahwa semua blok terpasang dengan benar.
/etc/apache2/sites-available/default
<VirtualHost *:80>
<Directory /var/www/html>
. . .
</Directory>
. . .
</VirtualHost>
Untuk menerapkan perubahan ini, mulai ulang Apache.
- sudo service apache2 restart
Sekarang, buat
.htaccess
file.
- sudo nano /var/www/html/.htaccess
Tambahkan baris pertama ini di bagian atas file baru untuk mengaktifkan
RewriteEngine
.
/var/www/html/.htaccess
RewriteEngine on
Simpan dan keluar dari file.
Untuk memastikan bahwa pengguna lain hanya dapat membaca Anda
.htaccess
, jalankan perintah berikut untuk memperbarui izin.
- sudo chmod 644 /var/www/html/.htaccess
Anda sekarang memiliki
.htaccess
file operasional , untuk mengatur aturan routing aplikasi web Anda.Langkah 4 - Mengatur File
Di bagian ini, kami akan menyiapkan penulisan ulang URL dasar, yang mengubah URL cantik menjadi jalur sebenarnya ke kode. Secara khusus, kami akan mengizinkan pengguna untuk mengakses
example.com/about
.
Kami akan mulai dengan membuat file bernama
about.html
.
- sudo nano /var/www/html/about.html
Salin kode berikut ke dalam halaman HTML.
/var/www/html/about.html
<html>
<head>
<title>About Us</title>
</head>
<body>
<h1>About Us</h1>
</body>
</html>
Anda dapat mengakses aplikasi web Anda di
your_server_ip/about.html
atau example.com/about.html
. Sekarang perhatikan bahwa hanya about.html
dapat diakses; jika Anda mencoba mengakses your_server_ip/about
, Anda akan mendapatkan kesalahan Tidak Ditemukan . Kami ingin pengguna mengakses about
sebagai gantinya. Aturan penulisan ulang kami akan memungkinkan fungsi yang sangat ini.
Buka
.htaccess
file.
- sudo nano /var/www/html/.htaccess
Setelah baris pertama, tambahkan yang berikut.
/var/www/html/.htaccess
RewriteRule ^about$ about.html [NC]
File Anda sekarang harus identik dengan yang berikut.
/var/www/html/.htaccess
RewriteEngine on
RewriteRule ^about$ about.html [NC]
Selamat. Sekarang Anda dapat mengakses
example.com/about
di browser Anda!
Ini adalah contoh sederhana yang baik yang menunjukkan sintaks umum yang diikuti semua Aturan Menulis Ulang.
^about$
adalah string yang dicocokkan dari URL. Yaitu, itulah yang dilihat oleh para pemirsa di browsernya. Contoh kami menggunakan beberapa metakarakter .^
menunjukkan awal dari URL, setelahexample.com/
dilucuti.$
menunjukkan akhir dari URLabout
cocok dengan string "tentang"
about.html
adalah jalur sebenarnya yang diakses pengguna; artinya, Apache akan tetap melayani about.html
file.[NC]
adalah bendera yang mengabaikan kapitalisasi di URL.
Dengan aturan yang ditunjukkan di atas, URL berikut akan mengarah ke
about.html
:example.com/about
example.com/About
example.com/about.html
Hal-hal berikut tidak akan:
example.com/about/
example.com/contact
Pola umum
Di bagian ini, kami akan menunjukkan beberapa arahan yang biasa digunakan.
Aplikasi web Anda sekarang berjalan dan diatur oleh
.htaccess
file yang dilindungi . Contoh paling sederhana dimasukkan di atas. Kami akan mengeksplorasi dua contoh tambahan di bagian ini.
Anda dapat mengatur file contoh di jalur hasil jika Anda mau, tetapi tutorial ini tidak termasuk membuat file HTML dan PHP; hanya aturan untuk menulis ulang.
Contoh 1: Menyederhanakan String Kueri dengan RewriteRule
Semua orang
RewriteRule
mematuhi format berikut:RewriteRule pattern substitution [flags]
- RewriteRule : menentukan arahan
RewriteRule
- pattern : ekspresi reguler yang cocok dengan string yang diinginkan
- substitusi : jalur ke URL yang sebenarnya
- bendera : parameter opsional yang dapat memodifikasi aturan
Aplikasi web sering memanfaatkan string kueri , yang ditambahkan ke URL menggunakan
?
tanda tanya dan dipisahkan menggunakan &
ampersand. Ini diabaikan saat mencocokkan aturan penulisan ulang. Namun, terkadang string kueri mungkin diperlukan untuk melewatkan data di antara halaman. Sebagai contoh, halaman hasil pencarian yang ditulis dalam PHP dapat memanfaatkan sesuatu yang mirip dengan yang berikut:http://example.com/results.php?item=shirt&season=summer
Dalam contoh ini, kami ingin menyederhanakan ini menjadi:
http://example.com/shirt/summer
Contoh 1A: Penggantian Sederhana
Dengan menggunakan aturan penulisan ulang, kita bisa menggunakan yang berikut:
/var/www/html/.htaccess
RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer
Di atas adalah cukup jelas, karena sebenarnya memetakan
shirt/summer
ke results.php?item=shirt&season=summer
. Ini mencapai efek yang kami inginkan.
Contoh 1B: Pilihan yang Cocok
Namun, kami ingin menggeneralisasikan ini untuk memasukkan semua musim. Jadi, kami akan melakukan hal berikut:
- Tentukan serangkaian opsi menggunakan
|
boolean, yang berarti "ATAU" - Kelompokkan pertandingan menggunakan
()
, lalu rujuk grup yang digunakan$1
, dengan1
untuk grup yang cocok pertama
Aturan Rewrite sekarang menjadi:
/var/www/html/.htaccess
RewriteRule ^shirt/(summer|winter|fall|spring) results.php?item=shirt&season=$1
Aturan yang ditunjukkan di atas sesuai dengan URL yang
shirt/
diikuti oleh musim yang ditentukan. Musim itu dikelompokkan menggunakan ()
dan kemudian direferensikan dengan $1
di jalur berikutnya. Ini berarti bahwa, misalnya, bahwa:http://example.com/shirt/winter
menjadi:
http://example.com/results.php?item=shirt&season=winter
Ini juga mencapai efek yang diinginkan.
Contoh 1C: Mencocokkan Set Karakter
Namun, kami juga ingin menentukan jenis barang apa pun, bukan hanya URL di
/shirt
. Jadi, kami akan melakukan hal berikut:- Tulis ekspresi reguler yang cocok dengan semua karakter alfanumerik. Ekspresi braket
[]
cocok dengan karakter apa pun di dalamnya, dan+
cocok dengan sejumlah karakter yang ditentukan dalam tanda kurung - Kelompokkan kecocokan, dan rujuk
$2
sebagai variabel kedua dalam file
/var/www/html/.htaccess
RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2
Di atas akan mengonversi, misalnya:
http://example.com/pants/summer
untuk:
http://example.com/results.php?item=pants&season=summer
Contoh 1D: Melewati String Kueri
Bagian ini tidak memperkenalkan konsep baru tetapi membahas masalah yang mungkin muncul. Dengan menggunakan contoh di atas, katakan kami ingin mengalihkan
http://example.com/pants/summer
tetapi akan meneruskan string kueri tambahan ?page=2
. Kami ingin yang berikut:http://example.com/pants/summer?page=2
untuk memetakan ke:
http://example.com/results.php?item=pants&season=summer&page=2
Jika Anda mencoba mengakses URL di atas dengan pengaturan kami saat ini, Anda akan menemukan bahwa string kueri
page=2
hilang. Ini dengan mudah diperbaiki menggunakan QSA
bendera tambahan . Ubah aturan penulisan ulang agar cocok dengan yang berikut, dan perilaku yang diinginkan akan tercapai.
/var/www/html/.htaccess
RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]
Contoh 2: Menambahkan Ketentuan dengan Logika
RewriteCond
mari kita tambahkan ketentuan ke aturan penulisan ulang kami. Semua orang RewriteCond
mematuhi format berikut:RewriteCond TestString Condition [Flags]
- RewriteCond : menentukan
RewriteCond
arahan - TestString : string untuk menguji
- Kondisi : pola yang cocok
- Bendera : parameter opsional yang dapat mengubah kondisi
Jika sebuah
RewriteCond
evaluasi untuk benar, RewriteRule
segera berikut akan dipertimbangkan.
Contoh 2A: Halaman Default
Dalam panel administrasi imajiner, kami mungkin ingin mengarahkan semua URL yang salah ke halaman beranda, alih-alih menyapa pengguna dengan 404. Dengan menggunakan ketentuan, kami dapat memeriksa untuk melihat apakah file yang diminta ada.
/var/www/html/.htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.*)$ /admin/home
Hal ini akan mengarahkan sesuatu seperti
/admin/blargh
untuk /admin/home
.
Dengan cara di atas:
%{REQUEST_FILENAME}
adalah string yang harus diperiksa!-f
menggunakan!
bukan operator pada namafileRewriteRule
mengalihkan semua permintaan kembali ke/admin/home
Perhatikan bahwa pendekatan yang lebih sintaksis dan tepat secara teknis adalah mendefinisikan 404
ErrorDocument
.
/var/www/html/.htaccess
ErrorDocument 404 /error.html
Contoh 2B: Pembatasan Akses IP
Meskipun ini juga dapat dicapai dengan menggunakan metode lain, yang
RewriteCond
dapat digunakan untuk membatasi akses ke satu IP atau kumpulan alamat IP.
Contoh ini memblokir lalu lintas dari mana saja kecuali 12.34.56.789.
/var/www/html/.htaccess
RewriteCond %{REMOTE_ADDR} !^(12\.34\.56\.789)$
RewriteRule (.*) - [F,L]
Contoh ini hanyalah negasi dari Contoh 3 dari artikel mod_rewrite lama . Seluruh pernyataan berbunyi "jika alamatnya tidak 12.34.56.789, jangan izinkan akses."
Pendeknya:
%{REMOTE_ADDR}
adalah string alamat!^(12\.34\.56\.789)$
keluar semua.
periode dengan\
backslash dan meniadakan alamat IP yang digunakan!
- The
F
bendera melarang akses, danL
bendera menunjukkan bahwa ini adalah aturan terakhir untuk menjalankan, jika dijalankan
Jika Anda lebih suka memblokir 12.34.56.789, gunakan ini sebagai gantinya:
/var/www/html/.htaccess
RewriteCond %{REMOTE_ADDR} ^(12\.34\.56\.789)$
RewriteRule (.*) - [F,L]
Anda dapat menemukan lebih banyak aturan penulisan ulang, dan cara mencegah hot linking, di artikel asli bagian 1 dan bagian 2 .
Kesimpulan
mod_rewrite
dapat digunakan secara efektif untuk memastikan URL yang dapat dibaca manusia. The .htaccess
file itu sendiri memiliki lebih banyak kegunaan dari sekedar modul ini, bagaimanapun, dan perlu dicatat bahwa banyak modul Apache lainnya dapat diinstal untuk memperluas fungsi nya.
Ada sumber daya lain yang merinci kemampuan
mod_rewrite
:mod_rewrite
adalah modul penting untuk keamanan aplikasi web, tetapi kadang-kadang bisa berakhir dengan pengalihan loop atau di mana-mana, 500 forbidden
kesalahan ambigu . Untuk tips tentang debugging .htaccess
, lihat posting StackOverflow ini .
Aturan penulisan ulang ditulis dengan ekspresi reguler. Untuk menjadi seorang pakar, rujuk tutorial ini semua tentang ekspresi reguler .
Untuk analisis cepat dari pola ekspresi reguler Anda, berikut adalah debugger online yang dapat memberikan umpan balik langsung dan interpretasi langsung dari pola ekspresi reguler Anda.
Tidak ada komentar:
Posting Komentar