File .htaccess adalah sebuah file text biasa yang biasanya digunakan untuk mengatur perilaku akses direktori situs web, mencakup pengaturan keamanan, redirect link, atau mengontrol akses dan cache server. File konfigurasi ini biasa ditemukan pada web server yang menggunakan Apache, yaitu salah satu web server gratis yang paling banyak digunakan untuk menjalankan aplikasi web.
(toc) #title=(Table of Content)
![]() |
| Ilustrasi Penggunaan Script .htaccess pada Web Wordpress |
Pengertian .htaccess dan Fungsinya
File .htaccess adalah sebuah file konfigurasi terdistribusi yang digunakan untuk mengatur perilaku akses terhadap direktori web Apache. Dengan .htaccess ini, kita dapat mengkostumisasi pengaturan Apache terhadap direktori dan sub direktori dimana file .htaccess ini disimpan. Dengan adanya file .htaccess ini, kita tidak perlu mensetting Apache melalui apache virtual host atau apache2.conf. Tentu ini sangat powerfull untuk pengguna Apache dimana sangat dimudahkan untuk dapat mengkostumisasi akses direktori tanpa menyentuh file config utama Apache. Barangkali saat mencoba konfigurasinya sedikit salah, maka tidak menyebabkan bencana untuk semua website yang ada di server tersebut.
Penulisan file .htaccess ini sendiri dimulai dengan tanda titik, yang berarti ini merupakan file tersembunyi pada sistem linux. Inilah yang terkadang membuat kita tidak melihat file ini di dalam folder web kita secara default sehingga kita harus mensetting "tampilkan berkas tersembunyi" pada settingan file manager. Begitupun halnya jika website telah diupload ke web server, saat anda mengaksesnya menggunakan Cpanel atau Filezilla, anda juga harus mengaktifkan opsi "tampilkan berkas tersembunyi".
Adapun fungsi dari file .htaccess sendiri sangatlah banyak. Secara umum, fungsi .htaccess dapat dikelompokkan dalam 4 fungsi utama, yaitu:
- Mengatur redirect dan permalink sehingga url lebih user friendly dan mengingkatkan SEO.
- Mengatur keamanan direktori seperti mencegah akses ke direktori, mencegah list isi direktori, memblokir alamat IP tertentu, melindungi folder dengan password, dan lainnya.
- Optimasi web, seperti pengaturan cache, optimalisasi pengalihan error, dan lainnya.
- Pengaturan Server Lainnya, seperti mengatur batas upload file, dan lainnya.
Tentang Web Wordpress
Wordpress merupakan salah satu Content Manajement System (CMS) terpopuler saat ini dan sangat banyak digunakan untuk membangun website. Sebagai salah satu proyek opensource, Wordpress dapat didownload dan digunakan secara gratis oleh setiap orang. Meski gratis, Wordpress sangatlah powerfull untuk menjalankan website. Wordpress terus melakukan peningkatan efisiensi dan keamanan secara periodik, dan pengguna dapat mengupdate versi rilisnya dengan mudah melalui tombol update atau bahkan melalui cronjob yang berjalan otomatis dibelakang layar. Ketersediaan template dan plugin yang melimpah juga menjadi alasan kenapa CMS ini sangat menarik bagi banyak orang. Singkatnya, Wordpress adalah CMS gratis, powerfull, populer, serba guna dan mudah digunakan.
Wordpress sendiri terdiri dari 2 jenis. Wordpress.com merupakan website builder gratis yang langsung dapat digunakan untuk membuat web. Layanan ini telah menyediakan hosting dan domain secara gratis. Namun jenis ini kurang bisa dikostumisasi. Sedangkan jenis lainnya adalah Wordpress.org yang merupakan tool CMS yang dapat didownload dan dikostumisasi untuk membangun web sesuai keinginan penggunanya. Namun kita perlu untuk menyewa hosting dan domain agar website yang kita bangun dapat diakses secara online. Jenis inilah yang akan kita bahas pada postingan ini.
Letak File .htaccess pada Web Wordpress
Secara umum, file .htaccess terletak pada root directory dari instalasi Wordpress kita (folder public_html atau www). Namun kita juga dapat menempatkannya pada sub folder lain dari instalasi wordpress, seperti folder wp-content, wp-admin dan sebagainya untuk pengaturan spesifik folder-folder tersebut.
Secara default, settingan .htaccess untuk Wordpress adalah sebagai berikut:
# 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>
# END WordPress
Settingan diatas merupakan settingan bawaan dari Wordpress. Kita hanya perlu mengatur permalink pada Wordpress Setting, maka file .htaccess akan digenerate secara otomatis. Permalink sendiri merupakan singkatan dari permanent link, yaitu suatu url yang mengarah pada suatu catatan blog atau website. Dengan permalink, url tidak lagi diakses melalui method atau parameter, tapi menggunakan slug yang lebih mudah dibaca oleh manusia dan lebih userfriendly untuk mesin pencari. Inilah kenapa permalink dapat meningkatkan SEO web.
File .htaccess yang digenerate melalui Wordpress berfungsi sebagai permalink, namun kita masih dapat mengkostumisasinya untuk konfigurasi lainnya seperti pengalihan halaman, meningkatkan keamanan dan optimalisasi website.
Setting .htaccess untuk Pengalihan Halaman(Redirect Pages)
Setting redirect halaman adalah settingan untuk membuat redirect suatu halaman ke halaman lainnya. Hal ini sangat diperlukan saat kita mengganti url postingan ke url baru, sehingga saat search enggine mengcrowling url lama, maka dapat langsung dialihkan ke url baru dan terhindar dari error 404 pada webmaster. Begitupun saat kita ingin memaksa akses ke https atau www, .htaccess juga dapat dikonfigurasikan untuk keperluan tersebut. Adapun settingan .htaccess untuk melakukan pengalihan halaman antara lain:
Pengalihan Halaman Permanen (301)
Pengalihan halaman permanen adalah jenis pengalihan halaman yang memberitahukan search enggine bahwa halaman lama telah secara permanen diubah ke halaman baru. Berikut merupakan contoh pengalihan halaman permanen untuk hal-lama.html ke hal-baru.html. Anda dapat mengganti contoh tersebut dengan halaman website anda secara spesifik.
# BEGIN PERMANENT REDIRECT
Redirect 301 /hal-lama.html /hal-baru.html
# END PERMANENT REDIRECT
Pengalihan Halaman Sementara (302)
Pengalihan halaman sementara (temporary redirect) adalah jenis pengalihan halaman yang memberitahukan search enggine bahwa halaman telah dipindahkan sementara ke url yang baru. pengalihan sementara ini akan memperlambat atau bahkan mencegah crowling ke halaman lama. Berikut contoh .htaccess untuk pengalihan halaman sementara.
# BEGIN TEMPORARY REDIRECT
Redirect 302 /hal-lama.html /hal-baru.html
# END TEMPORARY REDIRECT
Memaksa URL ke www
Dengan .htaccess, kita juga dapat memaksa url ke www, artinya saat search enggine mengakses contoh.com, maka akan secara otomatis dialihkan ke www.contoh.com. Berikut sintaksnya.
# BEGIN FORCE URL TO WWW
RewriteEngine on
RewriteCond %{HTTP_HOST} ^contoh.com [NC]
RewriteRule ^(.*)$ http://www.contoh.com/$1 [L,R=301,NC]
# END FORCE URL TO WWW
Memaksa URL ke non-www
Kebalikan dari trik sebelumnya, kita juga dapat memaksa url untuk mengakses halaman non-www, artinya saat search enggine mengakses www.contoh.com, maka akan otomatis dialihkan ke contoh.com. Berikut sintaksnya,
# BEGIN FORCE URL TO NON WWW
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.contoh.com [NC]
RewriteRule ^(.*)$ http://contoh.com/$1 [L,R=301]
# END FORCE URL TO NON WWW
Memaksa URL ke https
Kita juga dapat memaksa search enggine untuk dialihkan ke halaman dengan https. Jadi saat url http://contoh.com diakses , maka akan secara otomatis dialihkan ke https://contoh.com. Berikut contoh .htaccessnya.
# BEGIN FORCE URL TO HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# END FORCE URL TO HTTPS
Memaksa URL ke http
Kebalikan dari trik sebelumnya, kita juga dapat memaksa url ke http, dimana saat user mengakses https://contoh.com, maka akan otomatis dialihkan ke http://contoh.com.
# BEGIN FORCE URL TO HTTP
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# END FORCE URL TO HTTP
Setting .htaccess untuk Keamanan Wordpress
Melalui file .htaccess ini, kita juga dapat meningkatkan keamanan terhadap website Wordpress kita untuk mencegah akses terhadap file-file konfigurasi wordpress itu sendiri. Berikut beberapa konfigurasi .htaccess yang bisa digunakan untuk meningkatkan keamanan wordpress.
Menonaktifkan Penjelajah Direktori (Directory Browsing)
Secara default, saat kita mengakses direktori web server apache, kita dapat melihat file-file dan folder-folder yang ada di path url tersebut. Hal ini sangat rentan untuk keamanan website dan memungkinkan user untuk mengakses dan mendowload file-file di dalamnya. Dengan .htaccess, kita dapat menonaktifkan penjelajah direktori sehingga user tidak dapat melihat isi direktori path website kita.
# BEGIN DISABLE DIRECTORY BROWSING
Options -Indexes
# END DISABLE DIRECTORY BROWSING
Melindungi Akses File .htaccess
Jika user dapat mengakses file .htaccess anda, maka akan terjadi bencana. Karenanya, anda harus melindunginya dari pengguna yang tidak terverifikasi. Anda dapat memproteksinya dengan kode berikut.
# BEGIN PROTECT HTACCESS FILE
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
# END PROTECT HTACCESS FILE
Membatasi Akses Ke Halaman Admin
Akses ke halaman Admin Wordpress adalah bencana. Selain menggunakan password yang baik dan memindahkan halaman admin, kita juga dapat menggunakan file .htaccess untuk membatasi akses ke halaman admin wordpress. Triknya adalah kita membuat halaman admin hanya dapat diakses melalui IP kita saja. Untuk melakukannya, kita perlu membuat file .htaccess baru yang ditempatkan di folder /wp-admin.
# BEGIN LIMIT ADMIN ACCESS BY IP
# /wp-admin/.htaccess
<Limit GET POST PUT>
order deny,allow
deny from all
allow from xx.xx.xx.xx
#Replace XX with yours
</Limit>
# END LIMIT ADMIN ACCESS BY IP
Catatan: Ganti xx.xx.xx.xx dengan IP yang anda izinkan
Memblokir Akses Webmaster (User Agents)
Dengan .htaccess, kita juga dapat memproteksi web dari akses webmaster. Settingan ini saat bermanfaat jika kita tidak ingin website kita tidak diakses oleh beberapa boot webmaster. Tentu saja kita harus mengerti tentang jenis-jenis user agent dari webmaster yang ingin anda blokir.
# BEGIN BLOCK USER AGENTS
RewriteCond %{HTTP_USER_AGENT} ^BadBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^AnotherBadBot [NC]
RewriteRule ^.* - [F,L]
# END BLOCK USER AGENTS
Menonaktifkan XML-RPC
XML-RPC adalah sebuah fitur yang memungkinkan akses remote ke website wordpress. Bagaimana pun, ini dapat memberikan celah kepada hacker untuk mengekspoitasi website kita secara remote. Untuk mencegahnya, kita dapat menonaktifkan akses ke file xmlrpc.php wordpress. berikut kode .htaccessnya.
# BEGIN DISABLE XML-RPC
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
# END DISABLE XML-RPC
Mencegah Akses ke File Penting Wordpress
File-file penting seperti functions.php, wp-config.php, dan php.ini juga dapat kita proteksi dengan kode berikut.
# BEGIN SECURE IMPORTANT FILES
<FilesMatch "wp-config\.php|php.ini|functions\.php">
Order deny,allow
Deny from all
</FilesMatch>
# END SECURE IMPORTANT FILES
Mencegah Akses ke Folder wp-content
Folder wp-content berisi file-file penting seperti tema, media dan cache yang dapat dieksploitasi oleh hacker. Untuk memproteksinya, kita dapat membuat sebuah file .htaccess baru di dalam folder /wp-content. Kode berikut hanya akan mengizinkan user untuk mengupload file-file dengan ekstensi tertentu saja (xml, css, jpg, jpeg, png, gif, dan javascript). Anda dapat menyesuaikannya dengan mengganti ekstensinya pada .htaccess.
# BEGIN SECURE WP-CONTENT
# /wp-content/.htaccess
Order deny,allow
Deny from all
<Files ~ ".(xml|css|jpe?g|png|gif|js)$">
Allow from all
</Files>
# END SECURE WP-CONTENT
Mencegah Akses ke Folder includes
Beberapa area instalasi wordpress lebih baik dicegah aksesnya sehingga tidak membuka celah keamanan website kita. Berikut sintaks untuk membatasi akses ke folder include yang ada di wordpress.
# BEGIN PROTECT INCLUDES FOLDER
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
# END PROTECT INCLUDES FOLDER
Menonaktifkan Eksekusi File PHP
Mengizinkan eksekusi file php dari web wordpress dapat membuka celah keamanan. Untuk itu, kita dapat menonaktifkannya dengan memanfaatkan file .htaccess. Anda dapat membuat file .htaccess baru dan letakkan pada direktori yang ingin diproteksi seperti /wp-includes atau /wp-content/uploads/ yang secara default bersifat writable sehingga sangat perlu diproteksi.
# BEGIN DISABLE PHP EXECUTION
<Files *.php>
deny from all
</Files>
# END DISABLE PHP EXECUTION
Proteksi Script Injeksi
Skrip injeksi merupakan celah hacker untuk mengeksploitasi website wordpress dengan menyuntikkan kode berbahaya ke website untuk mengekstrak data atau mengambil alih website. Gunakan script berikut untuk memproteksinya.
# BEGIN SCRIPT INJECTION PROTECTION
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
# END SCRIPT INJECTION PROTECTION
Memblokir IP Address User
Jika anda menemukan seseorang yang melakukan spam di website kita atau meluncurkan upaya penyerangan, kita dapat memblokir IP pengguna tersebut melalui file .htaccess. Berikut contoh script untuk memblokir IP dari pengguna tersebut sehingga t
# BEGIN BLOCK IP ACCESS
<Limit GET POST>
order allow,deny
deny from xx.xx.xx.xx
#Replace XX with theirs
allow from all
</Limit>
# END BLOCK IP ACCESS
Catatan: Ganti xx.xx.xx.xx dengan IP yang anda ingin blokir
Setting .htaccess Untuk Optimasi Web
Untuk optimasi web wordpress, file .htacces juga memegang peranan penting. Kita dapat menggunakannya untuk meningkatkan performa website kita. Berikut optimasi wordpress menggunakan file .htaccess.
Mengaktifkan Cache Browser
Cache Browser adalah file sementara yang disimpan di sisi pengguna sehingga website tidak perlu menggeneratenya kembali dari aplikasi php dan database mysql. Ini tentu akan menghemat resource dan meningkatkan performa website. Cache ini biasanya terdiri dari file html, css, javacript, dan multimedia. Kita dapat memanfaatkan .htaccess untuk mensetting berapa lama cache tersebut akan disimpan di client, sehingga saat user mengunjungi halaman tersebut, dia hanya mengakses resource yang ada di perangkatnya saja. Berikut sintaks .htaccess yang paling optimal untuk mensetting cache browser web wordpress.
# BEGIN ENABLE BROWSER CACHE
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# JSON
ExpiresByType application/json "access plus 0 seconds"
# ICON
ExpiresByType image/x-icon "access plus 1 week"
# JS
ExpiresByType application/javascript "access plus 1 year"
# Media
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Web fonts
ExpiresByType application/font-woff2 "access plus 1 month"
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
</IfModule>
# END ENABLE BROWSER CACHE
Membatasi Batas Ukuran Upload File
Setting ini dapat digunakan untuk membatasi ukuran file yang dapat diupload ke web wordpress. Hati-hati menggunakan script ini dapat menyebabkan anda gagal mengupload file besar seperti tema web dan lain-lain.
# BEGIN LIMIT UPLOAD SIZE
php_value upload_max_filesize 10M
php_value post_max_size 10M
# END LIMIT UPLOAD SIZE
Mengaktifkan Kompresi Gzip
Untuk meningkatkan performa web, kita dapat memanfaatkan kompresi Gzip untuk memperkecil konten yang diakses pengguna sehingga meningkatkan pemuatan halaman. Gzip secara default sudah tersedia di PHP dan kita dapat mengaktifkannya menggunakan .htaccess.
# BEGIN COMPRESSION
<IfModule mod_deflate.c>
# Compress HTML, CSS, JavaScript, Text, XML and fonts
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
# Remove browser bugs
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
</IfModule>
# END COMPRESSION
Memecahkan Masalah Umum .htaccess pada Wordpress
Terkadang penerapan .htaccess memiliki beberapa permasalahan umum yang menyebabkan konfigurasi yang kita inginkan tidak dapat berjalan atau bahkan membuat website kita tidak dapat diakses sama sekali. Berikut ini merupakan beberapa masalah umum yang terjadi karena penerapan .htaccess dan bagaimana cara mengatasi dan memperbaikinya.
Kesalahan Sintaks pada .htaccess
Kesalahan penulisan sintaks pada file .htaccess sangat umum terjadi, seperti lupa tanda kurung, karakter, atau typo dapat menyebabkan website kita terganggu.
Untuk mencegah dan memperbaikinya, kita dapat menggunakan tools untuk memvalidasi .htaccess seperti htaccess-check.com untuk mengidentifikasi kesalahan. Perbaiki baris yang terdapat kesalahan dan simpan file .htaccess anda kembali.
Konfigurasi mod_rewrite Tidak Aktif
Terkadang fungsi .htaccess tidak berjalan karena konfigurasi modul mod_rewrite Apache yang tidak aktif.
Untuk memperbaikinya, anda perlu memastikan modul mod_rewrite anda aktif. Jika tidak, anda perlu mengaktifkannya dengan mengakses server melalui ssh/cpanel console dan menjalankan perintah sudo a2enmod rewrite. Pastikan anda merestar Apache service dengan perintah sudo systemctl restart apache2.
Kesalahan Penamaan dan Penempatan File
Kesalahan umum lainnya dalam penggunaan .htaccess adalah kesalahan dalam penamaan atau peletakan file .htaccess. Settingan .htaccess tidak akan bekerja jika file yang disimpan adalah .htacess yang mana kekurangan huruf c.
Untuk mencegah dan memperbaikinya, anda harus memastikan penulisan nama file .htaccess tidak ada kesalahan. Begitu pun halnya lokasi file .htaccess, harus ditempatkan pada lokasi yang seharusnya.
Situs Tidak Bekerja Setelah Konfigurasi .htaccess
Terkadang, website tidak bekerja sebagaimana biasanya setelah dilakukan konfigurasi pada file .htaccess. Ini mengindikasikan adanya kesalahan pada konfigurasi .htaccess tersebut.
Untuk memastikannya, anda bisa mencoba mengganti nama file .htaccess menjadi nama lain seperti .htaccess_backup. Jika setelah merubahnya website dapat kembali diakses secara normal, fix berarti konfigurasi .htaccessnya ada yang salah. Jika memungkinkan, anda perlu menghapus baris per baris konfigurasi .htaccess untuk mengidentifikasi permasalahan dan memperbaikinya.
Kesalahan yang Tidak Teridentifikasi
Jika penyebab kesalahan tidak dapat diidentifasi melalui langkah-langkah diatas, anda mungkin perlu melakukan pengecekan error log dari Apache. Jika hal ini tidak menyelesaikan masalah, mungkin anda dapat melaporkan permasalahan ke penyedia hosting atau system administrator anda sehingga dapat diidentifikasi lebih lanjut untuk perbaikannya.
Penutup
File .htaccess memang sangat berguna untuk meningkatkan keamanan dan mengoptimalisasi web wordpress. Namun kita perlu hati-hati dalam melakukan konfigurasi sehingga tidak menyebabkan masalah terhadap website atau menurunkan page rank pada search enggine. Namun, apapun itu dan seberapa pun besar resikonya, jika kita melakukannya dengan benar akan memberikan manfaat kepada kita. Saya berharap artikel ini dapat bermanfaat bagi anda para pembaca, meski sebenarnya postingan ini saya maksudkan sebagai catatan pribadi saya yang sering bergelut dengan web Wordpress. Silahkan tinggalkan komentar jika anda punya beberapa trik lainnya terkait settingan .htaccess pada wordpress.
