Apabila Anda memiliki web server dengan bandwidth yang terbatas, alangkah baiknya bila Anda
mencegah bot atau program crawler lainnya (biasanya disebut spider) mengakses web Anda.
Perlu diketahui bahwa setiap request yang diterima oleh web server, selalu menyertakan
informasi User Agent. Bila melakukan browsing biasa, maka User Agent bisa berarti browser
yang digunakan oleh pengguna. Contoh kode yang bisa Anda gunakan adalah sebagai berikut.
?
<IfModule mod_rewrite.c>
1SetEnvIfNoCase ^User-Agent$
2.*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|
collector|grabber|webpictures) HTTP_SAFE_BADBOT
3SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman)
4HTTP_SAFE_BADBOT
5Deny from env=HTTP_SAFE_BADBOT
</ifModule>
Untuk mengoptimalkan kode di atas, Anda harus memiliki daftar jenis User Agent yang memang
benar-benar bot atau crawler. Silahkan Anda tambahkan sendiri User Agent di kode tersebut
dengan mencari referensi di Internet.
?
1SetEnv TZ Australia/Melbourne
Daftar timezone yang bisa digunakan bisa Anda temukan pada alamat di bagian akhir artikel ini.
Secara default, server XAMPP memperbolehkan akses daftar folder. Kode untuk
mengaktifkannya dalam htaccess adalah seperti berikut.
?
1Options +Indexes
?
1Options –Indexes
Htaccess tidak hanya sekedar mengaktifkan atau menonaktifkan saja. Bila Anda mengaktifkan
fitur directory listing, Anda juga bisa mencegah file tertentu untuk tidak ditampilkan. Contohnya
adalah sebagai berikut.
?
1IndexIgnore *.gif *.zip *.txt blog.html
Dengan demikian file berekstensi gif, zip, dan txt, serta file blog.html tidak akan ditampilkan
pada directory listing.
Redirect
Ada kalanya Anda ingin mengalihkan sebuah URL di website Anda ke alamat lainnya. Bisa jadi
alasannya adalah karena alamat lama terdapat di suatu folder tertentu, kemudian ingin
memindahkannya. Padahal sudah banyak pengguna yang menghafalkan alamat tersebut. Dengan
menggunakan htaccess, masalah tersebut dapat diatasi.
?
1Redirect /index.html /blog.html
Anda juga bisa melakukan redirect untuk keseluruhan folder.
?
1Redirect /folderlama /folderbaru
Cara yang lebih ampuh lagi melakukan redirect adalah menggunakan perintah RedirectMatch.
?
1RedirectMatch "\.html$" http://mimicreative.net/home
Pada perintah di atas, semua request terhadap alamat dengan akhiran “.html” akan diarahkan ke
alamat “home”.
Anda bisa mengubah file default dengan menggunakan htaccess. Caranya adalah sebagai berikut.
?
1DirectoryIndex home-page.html
Dengan demikian, apabila pengguna mengakses folder tanpa diikuti nama file, secara otomatis
akan diarahkan untuk mengakses file “home-page.html”. Anda juga bisa mengatur tidak hanya
satu file saja, tapi urutan file yang akan dicari seperti berikut.
?
1DirectoryIndex home-page.html index.html index.php
Dengan cara di atas, server akan mencari file secara berurutan dari “home-page.html”, yang bila
tidak ketemu akan dilanjutkan dengan pencarian “index.html”, yang kemudian akan mencari
“index.php”. Bila terdapat 2 nama file seperti “index.html” dan “index.php”, maka akan dipilih
yang paling kiri (sebagai prioritas).
?
1RewriteEngine On
2RewriteCond %{HTTP_HOST} !^haqqi.net$ [NC]
3RewriteRule ^(.*)$ http://haqqi.net/$1 [L,R=301]
Sedangkan bila Anda menginginkan website Anda selalu menggunakan www apabila mengakses
root domain, maka kode htaccess-nya adalah sebagai berikut.
?
1RewriteEngine On
2RewriteCond %{HTTP_HOST} ^haqqi.net [NC]
3RewriteRule ^(.*)$ http://www.haqqi.net/$1 [L,R=301]
Langkah ini cukup penting, mengingat masih banyak orang awam yang mengakes root domain
dengan awalan sub-domain www. Sedangkan untuk pilihan apakah alamat yang Anda gunakan
adalah www ataupun non-www, semua ada di tangan Anda.
Kompresi file
Salah satu perintah yang cukup bermanfaat lainnya adalah kompresi file yang dikirim dari server
ke pengguna. Htaccess mampu melakukannya, dengan beberapa baris saja. Kompresi yang
digunakan adalah zlib, berikut contoh kode-nya.
?
1
2 # compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
3 AddOutputFilterByType DEFLATE text/html
4 AddOutputFilterByType DEFLATE text/xml
5 AddOutputFilterByType DEFLATE text/css
6 AddOutputFilterByType DEFLATE application/xml
7 AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
8 AddOutputFilterByType DEFLATE application/javascript
9 AddOutputFilterByType DEFLATE application/x-javascript
10
Kode di atas akan mengkompres file teks, html, javascript, css, dan xml. Anda bisa
menambahkan jenis file lainnya selama Anda mengerti jenis file atau mime-type file yang akan
Anda kompres.
Cache File
Mekanisme caching dapat mempercepat akses website karena file yang di-cache tidak perlu
diproses lagi. Cara ini cukup efektif terutama bila website Anda memiliki pengguna tetap.
Pengguna akan mengakses file ter-cache alih-alih mendownload file yang sama lagi. Cache bisa
terletak di server maupun komputer pengguna. Berikut ini contoh kode untuk men-cache
beberapa tipe file.
?
1<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
2Header set Cache-Control "max-age=2592000"
3</FilesMatch>
Anda bisa mengubah seberapa lama cache akan disimpan dengan mengatur parameter “max-
age”. Pastikan Anda men-cache hanya jenis file yang sangat jarang sekali berubah, karena
terkadang ada file yang bersifat dinamis. File script seperti PHP sebaiknya tidak di-cache,
terutama bila Anda cukup sering mengubah-ubah file PHP tersebut.
Untuk menghindari cache pada script dan file-file dinamis lainnya, Anda bisa menggunakan
kode berikut ini.
?
1<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
2Header unset Cache-Control
3</FilesMatch>
Dengan demikian, maka file tersebut tidak akan di-cache oleh server maupun browser pengguna.
Setiap kali pengguna mengakses file tersebut, browser akan selalu mendownload yang terbaru.
?
1
AddType application/rtf .rtf
2AddType image/gif .gif .GIF
3AddType image/ief .ief
4AddType image/jpeg .jpeg .jpg .jpe .JPG
5AddType image/tiff .tiff .tif
6AddType application/zip .zip
AddType application/x-mif .mif
7
Ada berbagai jenis MIME yang bisa Anda lihat pada alamat di akhir artikel ini. Berbagai trik
juga bisa diterapkan, seperti trik untuk masalah file MP3 atau SWF yang tidak dijalankan, Anda
bisa mengatur MIME Type seperti berikut.
?
1AddType application/x-shockwave-flash .swf
Trik lain, beberapa browser mungkin akan menampilkan jenis file tertentu di browser tersebut,
seperti file PDF ataupun Word. Untuk “memaksa” browser agar langsung melakukan download,
Anda bisa mengatur MIME Types dari extensi suatu file menjadi “application/octet-stream”,
seperti berikut.
?
1AddType application/octet-stream .pdf .doc
Bisa dilihat pula pada contoh di atas, Anda bisa mendeklarasikan beberapa ekstensi pada satu
baris.
Penutup
Masih banyak trik yang dapat dilakukan dengan htaccess ini. Manfaat yang bisa didapat pun
berbagai ragam. Namun perlu Anda ingat sekali lagi, bahwa perintah dalam root folder htaccess
akan berdampak pula pada folder di dalamnya. Jadi, berhati-hatilah terhadap pedang bermata dua
yang bisa membingungkan Anda ini. Selamat mencoba.
Server Errors
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
Dalam konfigurasi webserver yang menggunakan scripting PHP, baik itu versi 4 ataupun 5
sangatlah mudah, yaitu dengan melakukan konfigurasi di php.ini. Di OS Windows maupun linux
dan sejenisnya adalah sama.
Misalnya untuk mengaktifkan register_globals=on cukup mengganti saja di php.ini, akan tetapi
akan menjadi sedikit kendala apabila kita bukan super user pada mesin tersebut. Karena kita
tidak bisa akses mengganti konfigurasi php.ini, misalnya website anda pada server hostingan.
Atau dalam kasus lain, anda adalah super user dalam sebuah server web dan dalam server
tersebut diinstall beberapa aplikasi, misalnya cms, ada yang membutuhkan register_global aktif
dan ada yang mengharuskan register_global tidak aktif. Bagaimanakah solusinya?
Di dalam apache terdapat file .htaccess yang dapat berisi konfigurasi-konfigurasi yang dapat
melakukan override/menimpa seting di php.ini, inilah yang dapat dimanfaatkan.
1. Tidak menampilkan daftar file/folder di web jika tidak ada file indexnya (index.php,
index.htm, dll)
Options -Indexes
4. Mengganti file index yang sudah ditentukan di apachePada umunya webserver sudah
menentukan file-file index yang biasa dipakai dan apabila tidak didapat salah satu file
tersebut maka listing file/folder ditampilkan. Apabila diinginkan menampilkan file index
dengan nama lain, mislanya “utama.php”, maka ini dapat dilakukan dengan membuat
alternatif index
dapat juga digunakan hanya untuk sebuah file saja, misalnya /index.php dipindahkan ke
/baru/index.php
username:password
Dengan penambahan perlindungan website dengan password ini, maka website sekarang
dapat dibuka dengan
http://username:password@www.website.com/directory/
Ada bagian yang kelihatannya sepele tapi banyak kegunaannya untuk keberlangsungan website
Anda. Yaitu sebuah file yang bernama .htaccess.
File .htaccess adalah sebuah file teks ASCII sederhana. Anda bisa membuat atau mengedit file
ini di Text Editor (Notepad) dan kemudian mengunggahnya ke direktori yang ingin anda setting.
Perintah-perintah di dalam file .htaccess mempengaruhi direktori tempatnya berada dan semua
subdirektorinya. Bila anda meletakkan file .htaccess di public_html, maka hal tersebut akan
mempengaruhi semua website anda.
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^domainanda.com [nc]
rewriterule ^(.*)$ http://www.domainanda.com/$1 [r=301,nc]
Jika anda mau mencegah pengaksesan file lain, ganti nama file .htaccess dengan nama file yang
lain.
4. Blok IP tertentu atau pengunjung yang diarahkan dari web lain untuk mengakses web
Anda
Jika anda ingin mem-blok access untuk beberapa individu dan anda mengetahui IP / domain
name yang digunakan, tambahkan baris berikut :
order deny,allow
deny from 123.456.789.000
deny from 456.78.90.
deny from .capekdeh.com
allow from all
Pada contoh di atas, user dg IP 123.456.789.000 akan diblok. Semua user antara 456.78.90.000
sampai 456.78.90.999 akan diblok. Dan semua user yang terhubung dari capekdeh.com akan
diblok. Jika mereka mencoba mengakses situs Anda, maka akan tampil error 403 Forbidden
(“You do not have permission to access this site”).
Misalnya bila halaman lama Anda adalah halamanlama.html dan halaman baru adalah
halamanbaru.html, maka perintahnya adalah:
Perhatikan bahwa nama direktori yang lama ditulis dengan “relative path”, sementara yang baru
ditulis dengan “URL absolut” (dengan tanda “/”
Untuk mencegah orang lain melink secara langsung ke direktori image atau file anda dari
website mereka sehingga mencuri bandwidth Anda, maka gunakan:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domainanda.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ – [F]
Perintah tersebut akan membuat direktori image hanya bisa diakses bila user sedang mengakses
www.domainanda.com
Anda jugabisa membuat sebuah gambar bila direktori image Anda dilink. Contohnya image
jangandicuri.gif yang bertuliskan: “Mencuri membuat Anda sakit … kunjungi
http://domainanda.com untuk melihat gambar yang kami miliki”, maka gunakan perintah:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domainanda.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ http://www.domainanda.com/jangandicuri.gif [R,L]
Walaupun ada Akismet, tapi mungkin perlu juga Anda melindungi blog Anda dari serangan
spambot yang mencoba mengirim komentar spam langsung melalui wp-comment-post.php tanpa
mengakses blog kita.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
8. Melindungi WP-Config.php
Melindungi file wp-config.php yang berisi informasi nama database, username database, dan
password database anda.
# protect wpconfig.php
<files wp-config.php>
order allow,deny
deny from all
</files>
File .htaccess adalah file konfigurasi yang disediakan oleh web server Apache, yang biasanya
digunakan untuk mengubah pengaturan default dari Apache. Kita ketahui bahwa sebagian besar
web hosting di internet menggunakan Apache sebagai servernya sehingga bagi para pengelola
web / webmaster sedikit banyak harus belajar tentang .htaccess agar kita bisa mengubah
pengaturan default dari server. File .htaccess merupakan file teks ASCII sederhana yang
biasanya diletakkan dalam root direktori. File ini diharuskan dalam format ASCII dan bukan
binary dan untuk file permission (atribut file) pada server hosting harus di set 644 (rw-r-r). Hal
tersebut dimaksudkan agar server dapat mengakses file .htaccess, tapi mencegah user untuk
mengakses file .htaccess dari browser mereka. File .htaccess yang diletakkan dalam root
direktori dapat digunakan untuk mengubah konfigurasi dari subdirektori-subdirektori yang ada
didalamnya, sehingga dalam satu website biasanya kita cukup untuk mempunyai 1 file .htaccess
saja yang diletakkan dalam root direktori.
Kode perintah dalam file .htaccess harus ditempatkan dalam satu baris, jadi apabila kita
membuat file .htaccess dengan menggunakan text editor seperti notepad maka kita harus
mendisable fungsi word wrap (memotong baris) terlebih dahulu.
Pesan error pada sebuah website sangat penting karena bisa membantu para pengunjung dalam
mengetahui apa yang sedang terjadi. Dengan htaccess kita dapat mengubah halaman error pada
server, dengan mendefinisikan sesuai dengan keinginan kita sendiri. Contohnya yaitu pengalihan
pesan sesuai fungsinya seperti berikut :
Secara default, hanya halaman web yang mempunyai extensi .shtml yang bisa menjalankan
server-side termasuk SSI di server. Dengan menggunakan .htaccess kita dapat mengubah setting
default tersebut agar SSI bisa bekerja dengan format HTML.
Untuk mengubah pengaturan tersebut, kita dapat menambahkan kode berikut di file .htaccess
Jika kita menginginkan halaman yang berekstensi .html dan .htm untuk dapat menjalankan SSI,
maka file .htaccess dapat ditambahkan kode berikut
artinya bahwa file .htaccess dapat digunakan untuk mengubah nama default halaman depan web.
Agar user bisa mengakses website kita hanya dengan nama domain saja
(http://www.nama_web.com) tanpa harus menulis nama file secara jelas
(http:www.nama_web.com/file.html), kita harus mempunyai file index di root direktori. Nama
file yang bisa diterima antara lain index.html, index.htm, index.cgi, index.php dll. Pastikan
bahwa file tsb bernama index.*
Ada tingkatan dalam pemberian nama tersebut. Jika kita punya index.cgi & index.html di root
direktori maka server akan menampilkan index.cgi karena .cgi memiliki tingkatan yang lebih
tinggi daripada .html
Dengan .htaccess, kita bisa mendefinisikan file index tambahan atau bisa juga mengubah urutan
tingkatannya. Untuk mendefinisikan mainpage.html sebagai halaman index, kita dapat
menambahkan kode berikut ke file .htaccess
DirectoryIndex mainpage.html
Hal ini akan membuat server mencari file bernama mainpage.html. Jika server menemukannya
maka server akan menampilkannya. Tapi bila tidak, maka server akan menampilkan error 404
Missing Page
Untuk mengubah urutan tingkatan, kita dapat memasukkan perintah DirectoryIndex dengan
nama-nama file dalam satu baris. Urutan penulisan file tersebut menentukan urutan tingkatan,
contohnya:
Untuk alasan keamanan, server Apache biasanya telah menghilangkan default setting yang
memungkinkan directory indexing. Opsi inilah yang memungkinkan isi dari direktori untuk
ditampilkan di browser jika direktori tersebut tidak mempunyai halaman index.
Contohnya, jika kita memasukkan sebuah UR yang tidak mempunyai halaman index seperti
misalnya http://domainanda.com/images/, maka browser akan menampilkan daftar images di
dalam direktori tersebut
Jika kita menginginkan mem-blok access untuk beberapa user, dimana kita mengetahui IP /
domainname yang digunakannya, kita dapat menambahkan kode berikut :
order deny,allow
deny from 123.456.789.000
deny from 456.78.90.
deny from .aol.com
allow from all
Pada contoh di atas, user dg IP 123.456.789.000 akan diblok. Semua user antara 456.78.90.000
sampai 456.78.90.999 akan diblok. Dan semua user yang berasal dari AOL.com akan diblok.
Jika mereka mencoba mengakses website kita, maka akan tampil error 403 Forbidden (”You do
not have permission to access this site”)
Misalkan kita membuat ulang seluruh website kita, me-rename halaman & direktori. Maka
pengunjung halaman lama akan mendapat error 404 File Not Found. Masalah tersebut dapat
diatasi dengan melakukan redirect dari halaman lama ke halaman yang baru. Contohnya bila
halaman lama kita adalah oldpage.html dan halaman baru adalah newpage.html maka
perintahnya adalah:
Perhatikan bahwa nama direktori yang lama ditulis dengan relative path, sementara yang baru
ditulis dengan URL absolut
Untuk mencegah orang lain me-link secara langsung ke direktori image anda dari website
mereka, biasanya ada orang mengambil gambar dari website kita, tapi tetap menggunakan link
diserver host kita, ini tentu akan merugikan bagi kita karena dapat mengurangi bandwith di
hosting kita, untuk mengatasi hal ini kita dapat menambahkan kode berikut:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?namadomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
Perintah tersebut akan membuat direktori image hanya bisa diakses bila user sedang mengakses
www.namadomain.com
Jika kita merasa jengkel, kita bisa membuat sebuah image alternatif bila direktori image di-link
oleh orang lain. Contohnya kita membuat image alternatif dengan nama nogambar.gif yang
bertuliskan: “Gambar dr web lain … kunjungi http://namadomain.com untuk melihat gambar
sebenarnya.” Maka kita dapat menambahkan kode berikut:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.mydomain.com/dontsteal.gif [R,L]
order allow,deny
deny from all
9. Rewriting URLs
Agar kita dapat melakukan pengaturan pada permalink kita agar lebih SEO friendly kita dapat
menambahkan kode berikut ini:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Memerintahkan server untuk mengenali jenis file-file yang belum didaftarkan dalam sistem
server. Contohnya :
htaccess bisa mengendalikan caching pada web browser sehingga dapat mengurangi penggunaan
bandwidth atau aktivitas yang ada didalam server. Contohnya :
# 480 weeks
Header set Cache-Control "max-age=290304000, public"
# 2 DAYS
Header set Cache-Control "max-age=172800, public, must-revalidate"
# 2 HOURS
Header set Cache-Control "max-age=7200, must-revalidate"
Dari beberapa kegunaan dari file .htaccess diatas, kita dapat kembangkan sesuai dengan
kebutuhan kita.
Contoh penerapan htaccess pada php bisa anda baca pada tutorial Membuat clean url dengan php
Semoga bermanfaat
#############################################################################
##
## The Master .htaccess
##
## Version 2.5 (proposed) - May 16th, 2011
##
## ----------
## This file is designed to be the template .htaccess file to put on your new
## sites, increasing your site's security and performance. It is not meant to
## be just dropped in your site, though. You should go through all of its
## sections and modify it to match your site. Most notably, all instances of
## example.com and example\.com should be replaced with your real domain
name.
##
## Some sections are too picky and may cause problems with legitimate
requests.
## You are ultimately responsible for disabling them or writing exception
rules
## for your requests. Most notably, the advanced server protection section
will
## cause issues with several minifiers, eXtplorer, VirtueMart and other
exten-
## sions which use non-standard scripts as their entry points. You must add
## exceptions for them manually.
##
## Some sections - depending on your server configuration - may cause your
site
## to throw 500 Internal Server Error. The only way to figure out which one
is
## causing it is trial and error.
##
## Big thank you's to Brian Teeman, Ken Crowder, Radek Suski and Fotis
## Evangelou for sharing their .htaccess rules with the world and inspiring
## the creation of this file. Special thanks to Jon Brown for sharing his
## research and helping me improve this file.
##
## Additional thank-yous to John for his remarks and g1smd for taking the
## time to optimize the speed of the file.
##
## It is usually prudent to remove the comments from the file when using it
## on a live host to minimize the parsing time.
##
## ----------------------------------------------------------------------
## Do you want to customize this .htaccess file with a few clicks?
## Admin Tools Professional by AkeebaBackup.com does this and much more.
##
## Learn more: http://www.akeebabackup.com/software/admin-tools.html
## ----------------------------------------------------------------------
##
## Have fun, stay safe.
##
## Nicholas K. Dionysopoulos
## Lead Developer, AkeebaBackup.com
##
## CHANGELOG:
## Version 2.5 (proposed) (May 16th, 2011)
## - Placeholders for custom code. Correction of ruleset ordering.
## Version 2.4 (April 18th, 2011)
## - Dozens of speed optimisations and many logic and syntax corrections.
## Version 2.3 (November 18th, 2010)
## - Added .ico to the pass-through rules, for favicons to load
## Version 2.2 (October 25th, 2010)
## - Bug in the tmpl=component rule
## Version 2.1 (October 19th, 2010)
## - index.php to root redirection would kill some AJAX requests
## - Referer filtering was screwed up
## - Simplified and more thorough PHP Easter Egg code (thanks Jon!)
## - The tp/template/tmpl filter was not thorough and killed some components
## - Optimized Joomla! core SEF section
## - Bot filters and GZip optimization would never run for dynamic content
## - Content expiration optimization got more optimized
## - Added ETag rule
##
#############################################################################
##
# RewriteBase /
########## End - RewriteBase
## Referrer filtering for common media files. Replace with your own domain
name.
## This blocks most common fingerprinting attacks ;)
## Note: Change www\.example\.com with your own domain name, substituting the
## dots with \. i.e. use www\.example\.com for www.example.com
RewriteRule
^images/stories/([^/]+/)*([^/.]+\.)+(jp(e?g|2)?|png|gif|bmp|css|js|swf|ico)$
- [L]
RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.(jp(e?g|2)?|png|gif|bmp|css|js|swf|ico)$ - [F]
## Disallow visual fingerprinting of Joomla! sites (module position dump)
## Initial idea by Brian Teeman and Ken Crowder, see:
## http://www.slideshare.net/brianteeman/hidden-joomla-secrets
## Improved by @nikosdion to work more efficiently and handle template
## and tmpl query parameters
RewriteCond %{QUERY_STRING} (^|&)tmpl=(component|system) [NC]
RewriteRule .* - [L]
RewriteCond %{QUERY_STRING} (^|&)t(p|emplate|mpl)= [NC]
RewriteRule .* - [F]
# Add more rules for allowing full access (except PHP files) on more
directories here
## Back-end protection
## This also blocks fingerprinting attacks browsing for XML and INI files
RewriteRule ^administrator/?$ - [L]
RewriteRule ^administrator/index\.(php|html?)$ - [L]
RewriteRule ^administrator/index[23]\.php$ - [L]
RewriteRule
^administrator/(components|modules|templates|images|plugins)/([^/]+/)*([^/.]+
\.)+(jp(e?g|2)?|png|gif|bmp|css|js|swf|html?|mp(eg?|[34])|avi|wav|og[gv]|xlsx
?|docx?|pptx?|zip|rar|pdf|xps|txt|7z|svg|od[tsp]|flv|mov)$ - [L]
RewriteRule ^administrator/ - [F]
## Allow limited access for certain Joomla! system directories with client-
accessible content
RewriteRule
^(components|modules|plugins|templates)/([^/]+/)*([^/.]+\.)+(jp(e?g|2)?|png|g
if|bmp|css|js|swf|html?|mp(eg?|[34])|avi|wav|og[gv]|xlsx?|docx?|pptx?|zip|rar
|pdf|xps|txt|7z|svg|od[tsp]|flv|mov)$ - [L]
## Uncomment this line if you have extensions which require direct access to
their own
## custom index.php files. Note that this is UNSAFE and the developer should
be ashamed
## for being so lame, lazy and security unconscious.
# RewriteRule ^(components|modules|plugins|templates)/([^/]+/)*(index\.php)?$
- [L]
## Uncomment the following line if your template requires direct access to
PHP files
## inside its directory, e.g. GZip compressed copies of its CSS files
# RewriteRule ^templates/([^/]+/)*([^/.]+\.)+php$ - [L]
RewriteRule ^(components|modules|plugins|templates)/ - [F]
## Disallow access to rogue PHP files throughout the site, unless they are
explicitly allowed
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{REQUEST_FILENAME} !/index[23]?\.php$
## The next line is to explicitly allow the forum post assistant(fpa-
xx)script to run
RewriteCond %{REQUEST_FILENAME} !/fpa-[a-z]{2}\.php
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^/]+/)*([^/.]+\.)+php$ - [F]
If not using the suggested master htaccess file, the following suggestions will need
RewriteEngine set to On, and will likely also need Options +FollowSymLinks too:
# mod_rewrite in use
RewriteEngine On
Options +FollowSymLinks