.htaccess¶
Introduction¶
File .htaccess adalah file teks sederhana yang berisi perintah konfigurasi apache
Tutorial ini akan mengajarkan Anda apa itu file .htaccess dan cara mendefinisikannya untuk mengubah konfigurasi server apache.
Prasyarat¶
Anda harus memiliki pengetahuan dasar tentang:
Server HTTP Apache
Protokol HTTP dan header HTTP
Apa itu file htaccess?¶
File .htaccess adalah file teks sederhana yang berisi perintah konfigurasi apache. File ini dapat diedit dengan editor teks biasa seperti notepad di Windows, sedangkan di Linux, misalnya, dengan vi, nano atau mcedit.
Cara kerjanya¶
File .htaccess Apache bekerja dengan cara yang sangat sederhana: saat Apache menerima permintaan, sebelum menjalankannya, ia akan memeriksa apakah file .htaccess ada di folder tempat file yang diminta berada atau di folder sebelumnya; jika ada, ia akan membaca dan menginterpretasikannya saat dijalankan dan mengonfigurasi dirinya sendiri untuk mematuhi arahan dalam file tersebut.
Catatan
Setiap ada perubahan pada file .htaccess, diharuskan untuk reload service Apache
$ sudo service apache2 reload
Fungsi htaccess¶
File .htaccess umumnya digunakan untuk:
Menolak akses IP tertentu ke situs Anda
Melindungi situs Anda dengan kata sandi
Menulis ulang URL
Halaman kesalahan khusus
Mengompresi dan Menyimpan File dalam Cache
Keamanan Umum dan Pencegahan Peretasan
Cakupan htaccess¶
Cakupan file .htaccess dibatasi pada folder tempat file tersebut berada. Cakupan juga mencakup semua subfolder dan file terkait di direktori root.
Catatan
Menggunakan perintah yang memanggil, dengan cara apa pun, folder sebelumnya di direktori akan menyebabkan "Internal Server Error" yang merupakan kesalahan (error) 500-type.
Semua file .htaccess yang ada di subdirektori folder yang berisi file dengan perintah akan memiliki prioritas lebih tinggi daripada .htaccess utama. Dengan cara ini, perintah apa pun yang diperoleh dari .htaccess yang ada di folder induk dapat ditimpa.
Kapan harus menggunakan (atau tidak menggunakan) file .htaccess¶
Secara umum, Anda hanya boleh menggunakan file .htaccess saat Anda tidak memiliki akses ke file konfigurasi server utama.
File .htaccess harus digunakan dalam kasus ketika penyedia konten perlu membuat perubahan konfigurasi ke server berdasarkan per direktori, tetapi tidak memiliki akses root pada sistem server.
Namun, secara umum, penggunaan file .htaccess harus dihindari jika memungkinkan. Ada dua alasan utama untuk menghindari penggunaan file .htaccess:
Performa: terutama karena file .htaccess dimuat setiap kali dokumen diminta, dan semua file .htaccess harus dicari di folder
Keamanan: mengizinkan pengguna mengubah konfigurasi server dapat mengakibatkan perubahan yang tidak dapat Anda kendalikan
Heading row 1, column 1 |
Heading row 1, column 3 |
|---|---|
Row 1, column 1 |
Row 1, column 3 |
Row 2, column 1 |
Row 2, column 3 |
Enable dan Apply¶
Enable .htaccess¶
File .htaccess biasanya diaktifkan secara default. Hal ini dikontrol oleh perintah AllowOverride dalam file httpd.conf. Perintah ini hanya dapat ditempatkan di dalam bagian <Directory>.
<Directory "/var/www">
AllowOverride All
</Directory>
Ada banyak nilai yang membatasi konfigurasi hanya pada konteks tertentu. Beberapa di antaranya adalah:
Catatan
Pastikan untuk selalu membuat cadangan file httpd.conf dan .htaccess sebelum Anda membuat perubahan.
Terkadang, bahkan satu kesalahan dalam file httpd.conf atau .htaccess akan mengakibatkan server mogok sementara, dan pengguna akan melihat halaman 500 - Internal Server Error.
Sebagai contoh:
# Only allow .htaccess files to override Authorization and Indexes
AllowOverride AuthConfig Indexes
Bagaimana direktif .htaccess diterapkan¶
Perintah konfigurasi dalam file .htaccess diterapkan ke direktori tempat file .htaccess berada dan semua subdirektorinya.
Penting juga untuk diingat bahwa mungkin ada file .htaccess di direktori yang lebih tinggi.
Catatan
Directives diterapkan sesuai urutan ditemukannya!
Oleh karena itu, file .htaccess dalam direktori tertentu dapat menggantikan perintah yang ditemukan dalam file .htaccess yang terletak lebih tinggi di pohon direktori. Dan perintah tersebut, pada gilirannya, dapat menggantikan perintah yang terletak lebih tinggi lagi, atau dalam file konfigurasi utama server itu sendiri.
.htaccess Directives¶
.htaccess directive pada dasarnya adalah perintah yang khusus untuk suatu modul atau terintegrasi ke dalam inti yang melakukan tugas tertentu atau menetapkan pengaturan khusus untuk cara Apache melayani situs web Anda.
Catatan
Direktif yang ditempatkan dalam file htaccess berlaku untuk direktori tempat mereka berada, dan semua subdirektori.
Direktif Utama dalam htaccess¶
Directive yang paling penting adalah:
LimitFilesOrderDeny/Allow
Perintah ini memungkinkan Anda untuk membatasi akses, atau memberikan akses, ke folder atau file tertentu. Melalui perintah ini, Anda juga dapat memberikan akses ke alamat ip atau host tertentu.
Misalnya, jika Anda ingin membatasi akses ke file jpeg kepada pengguna foo, Anda cukup menggunakan perintah Files beserta perintah Require:
AuthName "Title of Login Window"
AuthUserFile /path/absolute/a/.htpasswd
AuthType Basic
Require valid-user
<Files ~ ".*.jpg$">
Require user foo
</Files>
Arti dari kode diatas:
AuthNamedirektif berisi tile yang akan ditampilkan di jendela masukAuthUserFiledirektif berisi absolut path ke file yang berisi pengguna.AuthTypedirektif menunjukkan jenis autentikasi yang harus dilakukan Apache.Require valid-userdirektif memberi tahu Apache bahwa folder dan subfolder serta file di dalamnya akan diakses oleh semua pengguna yang ditentukan dalam file pengguna.Filesdirektif memaksa Apache untuk mengharuskan pengguna bernama foo untuk melakukan tampilan file dengan ekstensi jpg.
Catatan
Untuk membuat file .htpasswd, Anda dapat menggunakan utilitas htpasswd dari apache.
.htaccess Redirects¶
Anda mungkin perlu memberi tahu pengguna bahwa suatu sumber daya telah dipindahkan, sementara atau permanen.
Untuk melakukan ini, kita dapat menggunakan Redirect dan RedirectMatch.
Beberapa Contoh
<IfModule mod_alias.c>
# Redirect to a URL on a different host
Redirect "/service" "http://foo2.example.com/service"
# Redirect to a URL on the same host
Redirect "/one" "/two"
# Equivalent redirect to URL on the same host
Redirect temp "/one" "/two"
# Permanent redirect to a URL on the same host
Redirect permanent "/three" "/four"
# Redirect to an external URL
# Using regular expressions and RedirectMatch
RedirectMatch "^/oldfile\.html/?$" "http://example.com/newfile.php"
</IfModule>
Jika RedirectMatch digunakan, nilai yang mungkin untuk parameter pertama tercantum di bawah ini.
Catatan
Jika parameter pertama tidak disertakan, nilai temp default akan digunakan.
Cross-origin Resources¶
Dalam .htaccess, ada direktif yang memungkinkan Anda mengontrol akses CORS (Cross-Origin Resource Sharing) ke sumber daya server.
Catatan
CORS merupakan mekanisme berbasis header HTTP yang memungkinkan server menunjukkan asal eksternal (domain, protokol, atau port) yang diizinkan browser untuk memuat sumber daya.
Demi alasan keamanan, browser membatasi permintaan HTTP cross-origin yang dimulai dari skrip.
Misalnya, dengan menggunakan kebijakan asal yang sama, aplikasi web hanya dapat meminta sumber daya dari same-origin tempat aplikasi dimuat (kecuali respons dari others origin menyertakan header CORS yang sesuai).
Akses CORS umum¶
Direktif ini akan menambahkan header CORS untuk semua sumber daya dalam direktori dari situs web mana pun.
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
Penting
Dalam contoh ini, permintaan apa pun dari server eksternal akan dipenuhi. Untuk aplikasi di dunia nyata, hal ini mungkin bukan yang Anda inginkan.
Alternatifnya adalah dengan mendefinisikan secara eksplisit domain mana yang memiliki akses ke konten situs Anda.
Dalam contoh berikut, akses dibatasi pada subdomain dari situs utama (example.com).
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "subdomain.example.com"
</IfModule>
Catatan
Ini adalah solusi yang lebih aman dan sering diadopsi dalam aplikasi dunia nyata.
Cross-origin images (gambar)¶
Mengizinkan cross-origin dalam penggunaan gambar dan kanvas dapat menyebabkan serangang fingerprinting.
Catatan
fingerprinting attack adalah serangan di mana penyerang mengumpulkan informasi unik tentang perangkat lunak, protokol jaringan, sistem operasi, atau perangkat keras untuk mengidentifikasi dan memetakan target mereka.
Informasi ini, yang mirip dengan sidik jari manusia, dapat digunakan untuk menentukan jenis sistem yang ditargetkan dan mengidentifikasi kelemahan.
Untuk mengurangi kemungkinan serangan ini, Anda harus menggunakan atribut crossorigin dalam gambar yang Anda minta dan cuplikan kode di bawah ini dalam .htaccess Anda untuk menetapkan header CORS dari server.
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
<FilesMatch "\.(bmp|cur|gif|ico|jpe?g|a?png|svgz?|webp|heic|heif|avif)$">
SetEnvIf Origin ":" IS_CORS
Header set Access-Control-Allow-Origin "*" env=*IS_CORS*
</FilesMatch>
</IfModule>
</IfModule>
Catatan
Hal yang sama terjadi pada fonts. Jadi, Anda juga dapat melakukan:
<IfModule mod_headers.c>
<FilesMatch "\.(eot|otf|tt[cf]|woff2?)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
Cross-origin resource timing¶
Spesifikasi Resource Timing Level 1 mendefinisikan antarmuka bagi aplikasi web untuk mengakses informasi waktu lengkap untuk sumber daya dalam sebuah dokumen.
Header respons Timing-Allow-Origin menentukan asal yang diizinkan untuk melihat nilai atribut yang diambil melalui fitur Resource Timing API, yang jika tidak akan dilaporkan sebagai nol karena pembatasan lintas asal.
Jika sumber daya tidak disajikan dengan Timing-Allow-Origin atau jika header tidak menyertakan asal yang membuat permintaan, beberapa atribut objek PerformanceResourceTiming akan ditetapkan ke nol.
<IfModule mod_headers.c>
Header set Timing-Allow-Origin: "*"
</IfModule>
Custom Error Pages¶
Dalam .htaccess, Anda dapat menyediakan halaman kesalahan khusus untuk pengguna tergantung pada jenis kesalahan yang mereka terima.
Halaman kesalahan disajikan sebagai URL. URL ini dapat diawali dengan garis miring (/) untuk jalur web lokal (relatif terhadap DocumentRoot), atau menjadi URL lengkap yang dapat dibaca oleh klien.
Atau, pesan dapat diberikan untuk ditampilkan oleh browser.
ErrorDocument 500 /errors/500.html
ErrorDocument 404 /errors/400.html
ErrorDocument 401 https://example.com/path/my-page.html
ErrorDocument 403 "Sorry, can't allow you access today"
Catatan
Lihat dokumentasi Petunjuk ErrorDocument di situs dokumentasi HTTPD untuk informasi lebih lanjut.
Error Prevention¶
Pengaturan ini memengaruhi cara kerja MultiView pada direktori tempat konfigurasi diterapkan.
Efek MultiViews adalah sebagai berikut: jika server menerima permintaan untuk /some/dir/foo, jika /some/dir mengaktifkan MultiViews, dan /some/dir/foo tidak ada, maka server membaca direktori tersebut untuk mencari file bernama foo.*, dan secara efektif membuat peta tipe yang menamai semua file tersebut, menetapkan tipe media dan penyandian konten yang sama seperti jika klien meminta salah satunya berdasarkan nama. Kemudian server memilih kecocokan terbaik dengan persyaratan klien.
Pengaturan ini menonaktifkan MultiViews untuk direktori tempat konfigurasi ini berlaku dan mencegah Apache mengembalikan kesalahan 404 sebagai hasil penulisan ulang ketika direktori dengan nama yang sama tidak ada
Options -MultiViews
Media Types and Character Encodings¶
Apache menggunakan mod_mime untuk menetapkan metadata konten ke konten yang dipilih untuk respons HTTP dengan memetakan pola dalam URI atau nama file ke nilai metadata.
Catatan
Mengubah metadata untuk sebuah file tidak mengubah nilai header Last-Modified. Dengan demikian, salinan yang di-cache sebelumnya masih dapat digunakan oleh klien atau proxy, dengan header sebelumnya.
Jika Anda mengubah metadata (bahasa, jenis konten, set karakter, atau pengodean), Anda mungkin perlu 'menyentuh' file yang terpengaruh (memperbarui tanggal modifikasi terakhirnya) untuk memastikan bahwa semua pengunjung menerima header konten yang telah diperbaiki.
Penyajian jenis media yang tepat (MIME)¶
Mengaitkan jenis media dengan satu atau beberapa ekstensi untuk memastikan sumber daya akan disajikan dengan tepat.
Catatan
Server harus menggunakan teks/javascript untuk sumber daya JavaScript!
<IfModule mod_expires.c>
# Data interchange
AddType application/atom+xml atom
AddType application/json json map topojson
AddType application/ld+json jsonld
AddType application/rss+xml rss
AddType application/geo+json geojson
AddType application/rdf+xml rdf
AddType application/xml xml
# JavaScript
AddType text/javascript js mjs
# Manifest files
AddType application/manifest+json webmanifest
AddType application/x-web-app-manifest+json webapp
AddType text/cache-manifest appcache
# Media files
AddType audio/mp4 f4a f4b m4a
AddType audio/ogg oga ogg opus
AddType image/bmp bmp
AddType image/svg+xml svg svgz
AddType image/webp webp
AddType video/mp4 f4v f4p m4v mp4
AddType video/ogg ogv
AddType video/webm webm
AddType image/x-icon cur ico
# HEIF Images
AddType image/heic heic
AddType image/heif heif
# HEIF Image Sequence
AddType image/heics heics
AddType image/heifs heifs
# AVIF Images
AddType image/avif avif
# AVIF Image Sequence
AddType image/avis avis
# WebAssembly
AddType application/wasm wasm
# Web fonts
AddType font/woff woff
AddType font/woff2 woff2
AddType application/vnd.ms-fontobject eot
AddType font/ttf ttf
AddType font/collection ttc
AddType font/otf otf
# Other
AddType application/octet-stream safariextz
AddType application/x-bb-appworld bbaw
AddType application/x-chrome-extension crx
AddType application/x-opera-extension oex
AddType application/x-xpinstall xpi
AddType text/calendar ics
AddType text/markdown markdown md
AddType text/vcard vcard vcf
AddType text/vnd.rim.location.xloc xloc
AddType text/vtt vtt
AddType text/x-component htc
</IfModule>
Set Default Charset Attribute¶
Setiap bagian konten di web memiliki serangkaian karakter.
Gunakan AddDefaultCharset untuk menyajikan semua sumber daya yang diberi label sebagai text/html atau text/plain dengan charset UTF-8.
<IfModule mod_mime.c>
AddDefaultCharset utf-8
</IfModule>
Set Charset for specific Media Types¶
Dalam .htaccess, Anda dapat menentukan set karakter yang akan digunakan untuk jenis file tertentu.
Misalnya, Anda dapat menyajikan jenis file berikut dengan parameter charset yang diatur ke UTF-8 menggunakan direktif AddCharset yang tersedia di mod_mime.
<IfModule mod_mime.c>
AddCharset utf-8 .appcache \
.bbaw \
.css \
.htc \
.ics \
.js \
.json \
.manifest \
.map \
.markdown \
.md \
.mjs \
.topojson \
.vtt \
.vcard \
.vcf \
.webmanifest \
.xloc
</IfModule>
.htaccess Rewrites¶
Rewrites with mod_rewrite and the RewriteEngine Directives¶
mod_rewrite menyediakan cara untuk mengubah permintaan URL yang masuk, secara dinamis, berdasarkan aturan ekspresi reguler.
Hal ini memungkinkan URL acak dipetakan ke struktur URL internal dengan cara apa pun.
Mendukung aturan dalam jumlah tak terbatas dan kondisi tak terbatas yang dilampirkan ke setiap aturan untuk menyediakan mekanisme manipulasi URL yang benar-benar fleksibel dan canggih.
Mengaktifkan mod_rewrite¶
Pola dasar untuk mengaktifkan mod_rewrite merupakan prasyarat untuk semua tugas lain yang digunakan.
Langkah-langkah yang diperlukan adalah:
Aktifkan mesin penulisan ulang (ini diperlukan agar perintah
RewriteRuledapat berfungsi) seperti yang didokumentasikan dalam dokumentasi RewriteEngineAktifkan opsi
FollowSymLinksjika belum diaktifkan. Lihat dokumentasi Core Option- Jika host web Anda tidak mengizinkan opsi
FollowSymlinks, Anda perlu meng-comment atau menghapusnya, lalu uncomment pada barisOptions +SymLinksIfOwnerMatch, tetapi perlu diingat dampaknya terhadap kinerja Beberapa layanan hosting cloud akan mengharuskan Anda menyetel
RewriteBaseTergantung pada cara server Anda disiapkan, Anda mungkin juga perlu menggunakan perintah
RewriteOptionsuntuk mengaktifkan beberapa opsi untuk rewrite engine.
- Jika host web Anda tidak mengizinkan opsi
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymlinks
# Options +SymLinksIfOwnerMatch
# RewriteBase /
# RewriteOptions <options>
</IfModule>
Forcing HTTPS¶
Aturan Rewrite ini akan mengalihkan dari versi http:// yang tidak aman ke versi https:// yang aman dari URL:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
Jika Anda menggunakan cPanel AutoSSL atau metode webroot Let's Encrypt untuk membuat sertifikat SSL, metode tersebut akan gagal memvalidasi sertifikat jika permintaan validasi dialihkan ke HTTPS. Aktifkan kondisi yang Anda perlukan.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[\w-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Redirecting URLs dari www ke non-www¶
Direktif ini akan menulis ulang www.example.com menjadi example.com
Catatan
Anda tidak boleh menduplikasi konten di beberapa sumber (dengan dan tanpa www).
Hal ini dapat menyebabkan masalah SEO (duplikasi konten), dan oleh karena itu, Anda harus memilih salah satu alternatif dan mengalihkan yang lain. Anda juga harus menggunakan URL Kanonik untuk menunjukkan URL mana yang harus dirayapi mesin pencari (jika mendukung fitur tersebut).
Tetapkan variabel %{ENV:PROTO}, untuk mengizinkan penulisan ulang untuk dialihkan dengan skema yang sesuai secara otomatis (http atau https).
Aturan ini mengasumsikan secara default bahwa lingkungan HTTP dan HTTPS tersedia untuk pengalihan.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule ^ - [E=PROTO:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^ - [E=PROTO:http]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L]
</IfModule>
Menambahkan www di awal URL¶
Aturan ini akan menyisipkan www. di awal URL.
Aturan ini mengasumsikan secara default bahwa lingkungan HTTP dan HTTPS tersedia untuk pengalihan. Jika sertifikat SSL Anda tidak dapat menangani salah satu domain yang digunakan selama pengalihan, Anda harus mengaktifkan kondisi tersebut.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule ^ - [E=PROTO:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^ - [E=PROTO:http]
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{SERVER_ADDR} !=127.0.0.1
RewriteCond %{SERVER_ADDR} !=::1
RewriteRule ^ %{ENV:PROTO}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Directory Access¶
Direktif ini akan mencegah akses ke direktori yang tidak memiliki berkas indeks dalam format apa pun yang dikonfigurasikan untuk digunakan oleh server, seperti index.html, atau index.php.
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
Block access to files with sensitive information¶
Blokir akses ke file cadangan dan sumber yang mungkin ditinggalkan oleh beberapa editor teks dan dapat menimbulkan risiko keamanan saat siapa pun memiliki akses ke file tersebut.
Anda dapat menggunakan regular expression <FilesMatch> (lihat contoh di bawah) untuk melindungi berkas apa pun yang mungkin berakhir di server produksi Anda dan dapat mengekspos informasi sensitif tentang situs web Anda. Berkas-berkas ini dapat mencakup: berkas konfigurasi atau berkas yang berisi metadata tentang proyek dan lain-lain.
<IfModule mod_authz_core.c>
<FilesMatch "(^#.*#|\.(bak|conf|dist|fla|in[ci]|log|orig|psd|sh|sql|sw[op])|~)$">
Require all denied
</FilesMatch>
</IfModule>
Contoh script htaccess¶
WordPress¶
File .htaccess dalam WordPress memegang peran penting dalam mengatur berbagai aspek kunci situs web Anda, termasuk:
Struktur permalink untuk meningkatkan keterbacaan URL dan SEO.
Pengalihan URL untuk pengguna yang mencari halaman yang dipindahkan atau dihapus.
Peningkatan keamanan melalui aturan perlindungan dari serangan.
Optimalisasi kinerja melalui kompresi gzip dan caching.
Kustomisasi server untuk menyesuaikan pengaturan tertentu, seperti batas upload file.
Berikut adalah script .htaccess default WordPress yang bisa Anda gunakan:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
CodeIgniter (CI 3 dan 4)¶
File .htaccess dalam CodeIgniter memiliki fungsi utama dalam menangani rute URL, membuat permalink bersih dan ramah SEO, menetapkan aturan keamanan, serta mengatur pengaturan server seperti batas upload file dan waktu eksekusi skrip PHP.
Berikut ini adalah default file .htaccess pada Framework CodeIgniter 3:
<IfModule mod_rewrite.c>
RewriteEngine On
# !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading
# slashes.
# If your page resides at
# http://www.example.com/mypage/test1
# then use
# RewriteBase /mypage/test1/
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
ErrorDocument 404 /index.php
</IfModule>
Berikut ini adalah default file .htaccess pada Framework CodeIgniter 4:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Remove www. from the URL
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# If the request matches a file or directory, skip
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Route all requests to index.php
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Laravel¶
Laravel adalah framework PHP yang saat ini banyak digunakan oleh developer, untuk membuat sistem aplikasi berbasis website. Selain karena mudah dikembangkan, framework ini dilengkapi dengan berbagai modul atau library yang siap digunakan, sehingga Anda dapat lebih cepat membuat aplikasi yang diinginkan.
Hampir sama dengan CodeIgniter, fungsi htaccess di Laravel juga digunakan untuk pengaturan rewrite URL sehingga halaman-halaman pada aplikasi yang Anda buat dapat berfungsi.
Berikut ini adalah default file .htaccess pada Framework Laravel :
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Joomla¶
File .htaccess dalam Joomla memiliki fungsi utama dalam menangani rute URL, membuat permalink bersih dan ramah SEO, menetapkan aturan keamanan, serta mengoptimalkan kinerja situs web.
Berikut adalah script htaccess joomla yang bisa Anda gunakan:
##
# @package Joomla
# @copyright Copyright (C) 2005 - 2020 Open Source Matters. All rights reserved.
# @license GNU General Public License version 2 or later; see LICENSE.txt
##
##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line 'Options +FollowSymLinks' may cause problems with some server configurations.
# It is required for the use of Apache mod_rewrite, but it may have already been set by
# your server administrator in a way that disallows changing it in this .htaccess file.
# If using it causes your site to produce an error, comment it out (add # to the
# beginning of the line), reload your site in your browser and test your sef urls. If
# they work, then it has been set by your server administrator and you do not need to
# set it here.
##
## No directory listings
<IfModule mod_autoindex.c>
IndexIgnore *
</IfModule>
## Suppress mime type detection in browsers for unknown types
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
</IfModule>
## Can be commented out if it causes errors, see notes above.
Options +FollowSymlinks
Options -Indexes
## Disable inline JavaScript when directly opening SVG files or embedding them with the object-tag
<FilesMatch "\.svg$">
<IfModule mod_headers.c>
Header always set Content-Security-Policy "script-src 'none'"
</IfModule>
</FilesMatch>
## Mod_rewrite in use.
RewriteEngine On
## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site then comment out the operations listed
# below by adding a # to the beginning of the line.
# This attempts to block the most common type of exploit `attempts` on Joomla!
#
# Block any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root home page
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.
# RewriteBase /
## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.
Lokomedia¶
File .htaccess pada Lokomedia berperan dalam mengatur URL yang panjang dan rumit menjadi URL yang lebih pendek dan mudah diingat. Dengan demikian, file htaccess berfungsi untuk meningkatkan SEO dan user experience, mengatur redirect, mengatur caching, mengatur blokir akses ke folder tertentu dan dapat menangani error.
Berikut adalah script htaccess Lokomedia yang bisa Anda gunakan:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]