.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:

  1. Performa: terutama karena file .htaccess dimuat setiap kali dokumen diminta, dan semua file .htaccess harus dicari di folder

  2. 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:

  • Limit

  • Files

  • Order

  • Deny/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:

  • AuthName direktif berisi tile yang akan ditampilkan di jendela masuk

  • AuthUserFile direktif berisi absolut path ke file yang berisi pengguna.

  • AuthType direktif menunjukkan jenis autentikasi yang harus dilakukan Apache.

  • Require valid-user direktif memberi tahu Apache bahwa folder dan subfolder serta file di dalamnya akan diakses oleh semua pengguna yang ditentukan dalam file pengguna.

  • Files direktif 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:

  1. Aktifkan mesin penulisan ulang (ini diperlukan agar perintah RewriteRule dapat berfungsi) seperti yang didokumentasikan dalam dokumentasi RewriteEngine

  2. Aktifkan opsi FollowSymLinks jika belum diaktifkan. Lihat dokumentasi Core Option

  3. Jika host web Anda tidak mengizinkan opsi FollowSymlinks, Anda perlu meng-comment atau menghapusnya, lalu uncomment pada baris Options +SymLinksIfOwnerMatch, tetapi perlu diingat dampaknya terhadap kinerja
    • Beberapa layanan hosting cloud akan mengharuskan Anda menyetel RewriteBase

    • Tergantung pada cara server Anda disiapkan, Anda mungkin juga perlu menggunakan perintah RewriteOptions untuk mengaktifkan beberapa opsi untuk rewrite engine.

<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 hidden files and directories

Dalam sistem Linux dan Macintosh, berkas yang diawali dengan titik disembunyikan dari pandangan, tetapi tidak dapat diakses jika nama dan lokasinya diketahui. Jenis berkas ini biasanya berisi preferensi pengguna atau status utilitas yang tersimpan, dan dapat mencakup tempat yang agak pribadi seperti, misalnya, direktori .git atau .svn.

Direktori .well-known/ mewakili standar (RFC 5785) untuk "well-known locations" (misalnya: /.well-known/manifest.json, /.well-known/keybase.txt), dan oleh karena itu, akses ke konten yang terlihat tidak boleh diblokir.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]
    RewriteCond %{SCRIPT_FILENAME} -d [OR]
    RewriteCond %{SCRIPT_FILENAME} -f
    RewriteRule "(^|/)\." - [F]
</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]