Generator .htaccess

Buat aturan Apache .htaccess untuk konfigurasi server umum.

Tidak ada data yang meninggalkan perangkat Anda

Paksa HTTPS

Paksa WWW / tanpa WWW

Header keamanan

Kompresi GZIP

Caching browser

Halaman kesalahan kustom

Opsi direktori

File .htaccess yang dihasilkan

Apa itu .htaccess?

File .htaccess adalah file konfigurasi untuk server web Apache. Memungkinkan Anda menentukan pengalihan URL, header keamanan, aturan cache, dan lainnya · tanpa memodifikasi konfigurasi server utama.

Pertanyaan umum

Di mana menempatkan file .htaccess?

Tempatkan di direktori root situs Anda (biasanya public_html atau www). Aturan berlaku untuk direktori itu dan semua subdirektorinya.

Apakah ini akan berfungsi dengan Nginx?

Tidak. .htaccess spesifik untuk Apache. Nginx menggunakan sintaks konfigurasinya sendiri dalam nginx.conf atau file konfigurasi situs.

Bisakah .htaccess memperlambat situs saya?

Apache memeriksa .htaccess pada setiap permintaan, jadi file yang sangat besar dapat menambahkan overhead. Untuk situs dengan lalu lintas tinggi, memindahkan aturan ke konfigurasi Apache utama lebih cepat.

Apa sebenarnya .htaccess itu

File .htaccess adalah file konfigurasi per-direktori Apache. Nama ini secara luas dipahami sebagai singkatan dari «hypertext access», mencerminkan kegunaan utama file ini pada awalnya untuk membatasi akses ke dokumen hypertext. Letakkan satu di direktori mana pun dan direktif berlaku untuk direktori tersebut dan setiap subdirektori di bawahnya. File ini tidak memiliki nama sebelum titik (ini adalah file titik Unix, tersembunyi secara default) dan harus diberi nama persis .htaccess (huruf kecil, titik di awal) agar Apache dapat menemukannya di bawah pengaturan AccessFileName default.

Ada biaya performa nyata. Dokumentasi Apache menyatakannya secara eksplisit: «jika AllowOverride diatur untuk mengizinkan penggunaan file .htaccess, Apache akan mencari file .htaccess di setiap direktori. Dengan demikian, mengizinkan file .htaccess menyebabkan penurunan performa, terlepas dari apakah Anda benar-benar menggunakannya atau tidak.» Pohon direktori dijelajahi pada setiap permintaan HTTP. Untuk permintaan ke /var/www/html/foo/bar/baz.html, Apache memeriksa /.htaccess, kemudian /var/.htaccess, kemudian /var/www/.htaccess, kemudian /var/www/html/.htaccess, dan seterusnya, bahkan ketika tidak ada file tersebut yang ada. Rekomendasi Apache sendiri adalah menggunakan blok <Directory> main-config jika memungkinkan (diuraikan sekali saat startup), dan menyimpan .htaccess untuk lingkungan hosting di mana Anda tidak memiliki akses main-config.

Kapan Anda membutuhkannya (dan kapan tidak)

Apache mencantumkan dua kasus penggunaan yang sah untuk .htaccess: penyedia hosting yang memberi pengguna kontrol terbatas tanpa akses konfigurasi server penuh, dan kasus di mana direktif perlu berbeda di antara subdirektori di mana deployer hanya mengontrol sistem file. Di luar itu, dokumentasi secara eksplisit merekomendasikan memindahkan aturan ke blok <Directory> di konfigurasi utama.

nginx (web server terpopuler kedua) tidak mendukung .htaccess sama sekali; ia dengan sengaja menolak file konfigurasi per-direktori demi alasan performa, dan semua konfigurasi berada di nginx.conf dan file situs yang disertakan. Jika proyek Anda ada di nginx, output generator ini tidak akan membantu, Anda memerlukan blok server / location di file konfigurasi nginx. Caddy menggunakan sintaks Caddyfile-nya sendiri dengan HTTPS otomatis via Let's Encrypt sebagai default. LiteSpeed dan OpenLiteSpeed mendukung .htaccess untuk kompatibilitas Apache. IIS menggunakan web.config.

Penulisan ulang URL dan pola HTTPS kanonik

Sebagian besar pekerjaan .htaccess non-trivial menggunakan mod_rewrite, mesin penulisan ulang URL berbasis aturan Apache yang dibangun di atas ekspresi reguler POSIX extended. Bentuk dasarnya adalah RewriteRule pattern substitution [flags], opsional didahului oleh satu atau lebih kondisi RewriteCond. Blok force-HTTPS standar:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Flag [L,R=301] berarti «ini adalah aturan terakhir dalam putaran ini» dan «respons dengan HTTP 301 Moved Permanently.» 301 adalah pilihan yang tepat untuk redirect permanen, mesin pencari meneruskan ekuitas tautan dan browser melakukan cache secara agresif. Gunakan 302 (Found) hanya untuk redirect yang benar-benar sementara, di mana Anda tidak menginginkan perpindahan tersebut di-cache.

Di belakang load balancer atau reverse proxy yang mengakhiri TLS, server asal melihat HTTP biasa meskipun browser pengguna menggunakan HTTPS; aturan RewriteCond %{HTTPS} off yang naif kemudian melakukan redirect selamanya. Perbaikannya adalah memeriksa header yang diteruskan: RewriteCond %{HTTP:X-Forwarded-Proto} !https. Mode «Flexible SSL» Cloudflare (CDN berbicara HTTP ke asal sementara pengguna menggunakan HTTPS) adalah penyebab paling umum dari jebakan redirect-loop ini.

Pilih antara kanonisasi www dan non-www dengan pola serupa. Pilih satu hostname kanonik untuk SEO (menghindari masalah konten duplikat) dan untuk ruang lingkup cookie (subdomain www menerima cookie yang berbeda dari apex secara default).

Kompresi dan caching

mod_deflate mengompresi respons tekstual dengan gzip, secara dramatis mengurangi ukuran transfer pada text/HTML/CSS/JS. Bungkus blok dalam <IfModule mod_deflate.c> agar tidak merusak situs di server di mana modul tersebut tidak dimuat. Brotli (mod_brotli) adalah pengganti modern dan menggunakan pola yang sama.

mod_expires menetapkan header Expires dan Cache-Control: max-age. Sintaks «access plus 1 year» yang banyak digunakan berarti aset dapat di-cache selama satu tahun sejak pengguna mengambilnya. Max-age panjang tepat untuk nama file aset yang di-hash (app.abc123.js); max-age lebih pendek tepat untuk HTML dan segala sesuatu yang bisa berubah. Untuk kontrol yang lebih halus, Header set Cache-Control "public, max-age=31536000, immutable" pada file yang di-hash adalah praktik terbaik modern.

Header keamanan yang perlu diketahui

Sembunyikan apa yang tidak boleh dilayani

Dua one-liner penguatan keamanan yang terbayar sendiri:

Apache 2.4 menggantikan sintaks Order Allow,Deny yang lebih lama dengan keluarga direktif Require yang lebih bersih, Require all granted, Require all denied, Require ip 192.0.2.0/24, Require not ip 198.51.100.5. Sintaks lama masih berfungsi untuk kompatibilitas mundur tetapi didokumentasikan sebagai usang.

Kesalahan umum

Pertanyaan lainnya

Di mana tepatnya file ini harus diletakkan?

Di direktori yang isinya ingin Anda kontrol. Sebagian besar pengguna shared-hosting meletakkannya di document root situs mereka, public_html/, www/, atau htdocs/ tergantung pada host. Apache kemudian menjelajahi pohon direktori menerapkan aturan ke direktori tersebut dan setiap subdirektori di bawahnya.

301 atau 302, redirect mana yang harus saya gunakan?

301 Moved Permanently untuk perpindahan permanen. Mesin pencari mentransfer ekuitas tautan ke URL baru; browser melakukan cache redirect secara agresif. Gunakan ini untuk kasus «kami memindahkan halaman ini selamanya». 302 Found untuk redirect sementara, browser tidak melakukan cache dan mesin pencari tidak mentransfer peringkat. Gunakan 302 hanya ketika perpindahan tersebut memang sementara; menjadikan 302 sebagai default alih-alih 301 adalah salah satu kesalahan SEO yang paling umum.

Bagaimana cara melindungi direktori dengan kata sandi?

Buat file .htpasswd dengan utilitas command-line htpasswd (ia menyimpan baris username:bcrypt-hash) dan simpan di luar root web Anda. Kemudian dalam .htaccess: AuthType Basic, AuthName "Restricted Area", AuthUserFile /full/path/to/.htpasswd, Require valid-user. Browser menampilkan prompt Basic-auth sistem ke siapa pun yang mengunjungi direktori. Ini adalah pola Apache klasik; untuk autentikasi yang serius pertimbangkan sistem login tingkat aplikasi.

Apakah ini akan berfungsi di WordPress?

WordPress dikirimkan dengan blok .htaccess-nya sendiri (antara penanda # BEGIN WordPress dan # END WordPress) yang menangani permalink. WordPress akan menimpa apa pun di dalam penanda tersebut ketika Anda menyimpan pengaturan permalink. Tambahkan aturan Anda sendiri di luar penanda WordPress (biasanya di atasnya) agar aturan tersebut bertahan dari regenerasi otomatis.

Apakah ada yang dikirim ke server?

Tidak. Generator adalah JavaScript yang merakit blok direktif berdasarkan kotak centang Anda; output dibuat di browser Anda. Tidak ada yang berkaitan dengan domain atau opsi yang Anda pilih meninggalkan halaman; alat ini berfungsi secara offline setelah dimuat.

Alat terkait