Pengaturan .Htaccess di Linux

Ketika anda menggunakan XAMPP for windows sebagai paket server  maka file .htaccess akan bisa langsung berfungsi begitu pula ketika anda menginstal apache di windows , namun sebaliknya ketika anda menggunakan linux dalam hal ini ubuntu sebagai sistem operasi dan apache2 sebagai web server, maka file .htaccess secara default tidak bisa berjalan dengan baik (tidak aktif), ketika anda memaksakan menjalankan aplikasi web yang menggunakan .htaccess maka akan timbul Internal Error (Error 500) seperti berikut :

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/2.2.14 (Ubuntu) Server at www.smkn2-kng.lcl Port 80


Untuk menghilangkan error ini maka anda harus mengaktifkan file .htaccess dengan cara me-load sebuah modul apache yang menangani file .htaccess yaitu modul mod_rewrite, berikut langkah-langkahnya :

1. jalankan terminal, kemudian load modul mod_rewrite
    $sudo a2enmod rewrite

2. Edit file default di direktori /etc/apache2/sites-available
    $ sudo pico /etc/apache2/sites-available/default
3.  Edit seluruh directive AllowOverride None menjadi AllowOverride All
4. Restart web  server apache
     $sudo /etc/init.d/apache2 restart
5. Dan coba anda download salah satu contoh dari artikel tentang pemanfaatan file .htaccess pada blog ini, Insya Allah berjalan normal

Htaccess code igniter



1.      Pengertian dan Kegunaan .htaccess




File .htaccess adalah file konfigurasi yang disediakan oleh web server Apache, yang biasanya digunakan untuk mengubah settingan default dari Apache. Kita ketahui bahwa sebagian besar hosting web di internet menggunakan Apache sebagai servernya sehingga bagi para pengelola web / webmaster sedikit banyak harus belajar tentang .htaccess agar kita bisa mengubah settingan 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.

2.      Redirect  akses namadomain ke WWW.namadomain

Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]
Untuk mengubah nama domain dengan nama domain anda yang ingin anda setting

3.      Customize Error Messages

Jika  ingin mengubah halaman error server, dapat menggunakan .htaccess untuk mendefinisikan pesan error anda sendiri.  Contoh syntax nya yaitu :
ErrorDocument 500 /error.html

4.      Override SSI Settings

Secara default, hanya page dengan extensi .shtml yang dapat menjalankan server-side termasuk SSI di server. kita dapat mengubah hal tersebut di file .htaccess, apabila ingin mengubah konfigurasi tersebut sehingga SSI bisa bekerja dengan dokumen HTML, kita dapat membuat file.htaccess dan menguploadnya ke direkroti utama www. Tambahkan baris berikut ke file tsb
AddType text/html .html
AddHandler server-parsed .html
apabila kita ingin dokumen .html dan .htm untuk menjalankan SSI, buat file .htaccess dengan tambahan baris berikut
AddType text/html .html
AddHandler server-parsed .html
AddHandler server-parsed .htm


5.      Change Your Default Home Page
Agar user bisa mengakses site anda hanya dengan nama domain saja (http://www.site.net) tanpa harus menulis nama file secara jelas (http:www.site.net/file.html), anda harus mempunyai file index di direktori www. 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. Apabila mempunya index.cgi & index.html di direktori anda maka server akan menampilkan index.cgi karena .cgi memiliki tingkatan yang lebih tinggi daripada .html
Dengan .htaccess, dapat digunakan untuk mendefinisikan file index tambahan mengubah urutan tingkatannya. Untuk mendefiniskan hieronymous.html sebagai halaman index, tambahkan baris berikut ke file .htaccess
DirectoryIndex hieronymous.html
Hal ini akan membuat server mencari file bernama hieronymous.html. Jika server menemukannya maka server akan menampilkannya. Tapi bila tidak, maka server akan menampilkan error 404 Missing Page
Untuk mengubah urutan tingkatan, masukkan perintah DirectoryIndex dengan nama-nama file dalam satu baris. Urutan penulisan file2 tersebut menentukan urutan tingkatan, contohnya:
DirectoryIndex hieronymous.html index.cgi index.php index.html
6.      Enable Directory Browsing

Untuk alasan keamanan, kami 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 anda membuat sebuah http call ke direkori seperti http://yourdomain.com/images/, maka browser akan menampilkan daftar images di dalam direktori tersebut
Jika anda mengingikan opsi ini pada direktori tertentu, anda bisa mengaktifkannya dengan menambahkan baris berikut ke file .htaccess
Options +Indexes
7.      Block Users from Accessing Your Web Site
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 .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 terhubung dari AOL.com akan diblok. Jika mereka mencoba mengakses site-mu, maka akan tampil error 403 Forbidden (“You do not have permission to access this site”)
8.      Redirect Visitors to a New Page or Directory
Misalkan anda membuat ulang seluruh websitemu, 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-mu adalah oldpage.html dan halaman baru adalah newpage.html maka perintahnya adalah:
Redirect permanent /oldpage.html http://www.mydomain.com/newpage.html
Jika anda me-rename direktori, maka command-nya adalah:
Redirect permanent /olddirectory http://www.mydomain.com/newdirectory/
Perhatikan bahwa nama direktori yang lama ditulis dengan relative path, sementara yang baru ditulis dengan URL absolut
9.      Prevent Hot Linking and Bandwidth Leeching
Untuk mencegah orang lain me-link secara langsung ke direktori image anda dari website mereka, gunakan:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ – [F]
Perintah tersebut akan membuat direktori image hanya bisa diakses bila user sedang mengakses www.mydomain.com
Jika anda merasa jengkel, anda bisa membuat sebuah image alternatif bila direktori image-mu di-link. Contohnya image nosteal.gif yang bertuliskan: “Stealing is Bad … visit http://mydomain.com to see the real picture that belongs here.” Maka gunakan perintah:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.mydomain.com/dontsteal.gif [R,L]
10.  Prevent viewing of .htaccess or other files
Untuk mencegah user mengakses file .htaccess, ketikkan perintah:
order allow,deny
deny from all

Jika ingin mencegah pengaksesan file lain, ganti nama file .htaccess dengan nama file yang lain
Sumber:
·         http://ghetagheta.blogspot.com/2012/07/pengertian-dan-kegunaan-htaccess.html





Difinisi Active Record Codeigniter



  1. Difinisi Active Record.

Kita mengetahui bahwa dalam framework Codeigniter memiliki library database untuk melakukan perintah dalam mengeksekusi query ke database salah satunya adalah Active Record. Disini akan membahas tentang  menggabungkan dan menggunakan Active Record ke dalam satu method atau fungsiActive Record adalah suatu pola yang memungkinkan mengambil informasi, memasukkan, dan memperbarui data dari database dengan pengkodean/scripting seminimal mungkin. Dalam beberapa kasus hanya satu atau dua baris kode yang diperlukan untuk melakukan perintah ke database.

  1. Perintah active record pada codeigniter

   Selecting Data : Adalah proses dalam pemilihan data dari database, atau sama dengan membentuk pernyataan SQL SELECT serta menjalankan querynya.
   Inserting Data : Akan menghasilkan string insert berdasarkan data yang diberikan, dan menjalankan querynya. di sini kita dapat menggunakan sebuah array atau obyek ke dalam fungsi.
   Updating Data : Akan menghasilkan string update berdasarkan data yang diberikan, dan menjalankan querynya.
   Deleting Data : membentuk sebuah string delete, dan menjalankan querynya.
   Method Chaining : Metode chaining memungkinkan kita untuk menyederhanakan sintaks dengan menghubungkan beberapa fungsi sekaligus. Contohnya $this->db->select(‘title’)->from(‘mytable’)->where(‘id’, $id)->limit(10, 20);
   Active Record Caching : Digunakan untuk melakukan “chace” pada query kita dan bisa digunakan untuk proses berikutnya.

  1. Mempersiapkan Model Active Record

Dalam tutorial ini untuk nama model adalah Default_model, sehingga nanti file PHP untuk modelnya adalah default_model.php, Nah berikut salinan baris kode untuk model tersebut:
            <?php
            class Default_model extends CI_Model {
            public function __construct()
            {
                        parent::__construct();
            }
            function getDataDB($tabel,$field = '*', $cond = array(),$join = array(),$limit = array())
            {
                        $this->db->select($field);
                        $this->db->from($tabel);
                        if(count($join) > 0) {
                                    foreach ($join as $key => $val){
                                                $this->db->join($key,$val,'left');
                                    }
                        }
                        if(count($cond) > 0) $this->db->where($cond);
                        if(count($limit) == 1) $this->db->limit($limit[0]);
                        if(count($limit) == 2) $this->db->limit($limit[0],$limit[1]);
                        return $this->db->get();
            }
            function getDataDB2($tabel,$config = array())
            {
                        $data = array(
                                                'field' => '*',
                                                'join' => array(),
                                                'like' => array(),
                                                'where' => array(),
                                                'order' => array(),
                                                'limit' => array()
                                    );
                        foreach ($config as $key => $val){
                                    $data[$key] = $val;
                        }
                        $this->db->select($data['field']);
                        $this->db->from($tabel);
                        if(count($data['join']) > 0) {
                                    foreach ($data['join'] as $key => $val){
                                                $this->db->join($key,$val,'left');
                                    }
                        }
                        if(count($data['where']) > 0) $this->db->where($data['where']);
                        if(count($data['like']) > 0){
                                    foreach ($data['like'] as $key => $val){
                                                if(is_array($val)) $this->db->like($key,$val[0],$val[1]);
                                                else $this->db->like($key,$val);
                                    }
                        }
                        if(count($data['order']) > 0) {
                                    foreach ($data['order'] as $key => $val){
                                                $this->db->order_by($key,$val);
                                    }
                        }
                        if(count($data['limit']) == 1) $this->db->limit($data['limit'][0]);
                        if(count($data['limit']) == 2) $this->db->limit($data['limit'][0],$data['limit'][1]);
                        return $this->db->get();
            }
            }
            Seperti yang Anda lihat pada file default_model.php di atas terdapat dua buah fungsi yaitu          getDataDB, dan getDataDB2. Kedua fungsi tersebut masih saya gunakan hingga sekarang dan fungsi getDataDB2 merupakan pengembangan dari fungsi getDataDB.

  1. Mempersiapkan file Controller Codeigniter

Sekarang siapkan file Controllernya, di sini saya beri nama Idhamcontroller, sehingga file PHP-nya menjadi idhamcontroller.php. Berikut source codenya :

            <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
            class Idhamcontroller extends CI_Controller {
                                    function __construct()
                                    {
                                    parent::__construct();
                                    $this->load->model('default_model');
                                    }
            public function index()
             {
        $data['title'] = 'Menggabungkan dan Menggunakan Active Record Codeigniter ke dalam satu method atau fungsi';
            $data['user'] = $this->default_model->getDataDB('tabel1','*',array('id_tabel1 > '=>1,'id_tabel1 < '=>5));
                        $config1['where'] = array('id_tabel1'=>2);
                        $data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
                        $this->load->view('contoh',$data);
              }
            }

  1. Mempersiapkan file view dan databasenya

File view-nya saya beri nama contoh.php nah berikut source code-nya :
<!DOCTYPE html>
<html lang="en">
<head>
                <meta charset="utf-8">
                <title><?= $title; ?></title>
                <style type="text/css">
                ::selection{ background-color: #939191; color: white; }
                ::moz-selection{ background-color: #E13300; color: white; }
                ::webkit-selection{ background-color: #E13300; color: white; }
                body {background-color: #fff;           margin: 40px;font: 13px/20px normal Helvetica, Arial, sans-serif;color: #4F5155;}
                a {            color: #003399;   background-color: transparent;font-weight: normal;}
                h1 {color: #444;background-color: transparent;border-bottom: 1px solid #D0D0D0;font-size: 19px;font-weight: normal;margin: 0 0 14px 0;                padding: 14px 15px 10px 15px;}
                code {     font-family: Consolas, Monaco, Courier New, Courier, monospace;           font-size: 12px;     background-color: #f9f9f9;  border: 1px solid #D0D0D0;              color: #002166;   display: block;       margin: 14px 0 14px 0;       padding: 12px 10px 12px 10px;}
                #body{   margin: 0 15px 0 15px;}
                p.footer{                text-align: right;    font-size: 11px;     border-top: 1px solid #D0D0D0;       line-height: 32px; padding: 0 10px 0 10px;         margin: 20px 0 0 0;}
                #container{           margin: 10px;       border: 1px solid #D0D0D0;              -webkit-box-shadow: 0 0 8px #D0D0D0;}
                </style>
</head>
<body>
<div id="container">
                <h1><?= $title; ?>!</h1>

                <div id="body">
                                <p>
                                                Hasil 1, dengan perintah Select dan where menggunakan fungsi getDataDB :<br/>
                                                <?php
                                                if($user->num_rows > 0){
                                                                $hasil1 = '';
                                                                foreach($user->result() as $row){
                                                                                $hasil1 .= 'id_tabel1 : '.$row->id_tabel1.' | nama : '.$row->nama.'<br/>';
                                                                }
                                                                echo rtrim($hasil1,'<br/>');
                                                } else echo 'data kosong';
                                                ?>
                                </p>
                                <p>
                                                Hasil 2, dengan perintah Select dan where menggunakan fungsi getDataDB2 :<br/>
                                                <?php
                                                if($user2->num_rows > 0){
                                                                $hasil2 = '';
                                                                foreach($user2->result() as $row){
                                                                                $hasil2 .= 'id_tabel1 : '.$row->id_tabel1.' | nama : '.$row->nama.'<br/>';
                                                                }
                                                                echo rtrim($hasil2,'<br/>');
                                                } else echo 'data kosong';
                                                ?>
                                </p>
                </div>
                <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
</div>
</body>
</html>
Di bawah ini adalah database yang akan kita gunakan :

CREATE DATABASE `aktivrecord` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `aktivrecord`;
CREATE TABLE IF NOT EXISTS `tabel1` (
  `id_tabel1` int(11) NOT NULL AUTO_INCREMENT,
  `nama` varchar(20) NOT NULL,
  PRIMARY KEY (`id_tabel1`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `tabel1` (`id_tabel1`, `nama`) VALUES
(1, 'Baidu'),
(2, 'Google'),
(3, 'Alexa'),
(4, 'Idham'),
(5, 'Pembaca sekalian');

CREATE TABLE IF NOT EXISTS `tabel2` (
  `id_tabel2` int(11) NOT NULL AUTO_INCREMENT,
  `id_tabel1` int(11) NOT NULL,
  `tempat_lahir` varchar(20) NOT NULL,
  PRIMARY KEY (`id_tabel2`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `tabel2` (`id_tabel2`, `id_tabel1`, `tempat_lahir`) VALUES
(1, 1, 'China'),
(2, 2, 'AS'),
(3, 3, 'AS Mungkin'),
(4, 4, 'Sekadau'),
(5, 5, 'Dimana mana');
Sebelum menjalankan programnya silahkan setting file autoload.php di folder “./application/config/autoload.php”, tujuannya adalah kita ingin meload library database secara otomatis seperti gambar di bawah ini:



Jangan lupa juga mensetting file database.php Anda dan sesuaikan dengan pengaturan user di databaseAnda, sebagai contoh saya sertakan pula gambarnya di bawah ini:

  1. Pebjelasan penggunaan kode program active record

Penjelasan penggunaan di sini adalah cara menggunakan model Active Record Codeigniter yang telah kita buat tadi (file default_model.php) yang terletak pada file idhamcontroller.php yang juga sudah saya berikan source codenya di atas.
Yang pertama saya mau menjelaskan cara penggunaan default_model dengan nama fungsi getDataDB dahulu.

            $data['user'] = $this->default_model->getDataDB('tabel1','*',array('id_tabel1 >      '=>1,'id_tabel1 < '=>5));
Kode di atas merupakan contoh perintah Select dan where menggunakan fungsi getDataDB sehingga pernyataan SQL-nya menjadi “SELECT * FROM tabel1 WHERE id_tabel1 > 1 AND id_tabel1 < 5". Tanda bintang(*) menunjukan pengambilan semua field, jika hanya field tertentu silahkan tulis nama fieldnya dipisah oleh tanda koma misalnya “id_tabel1,nama” dan seterusnya. Selain itu Anda juga bisa menggunakan perintah join pada fungsi getDataDB ini misalnya sebagai berikut :
$data['user'] = $this->default_model->getDataDB('tabel1','tabel1.nama, tabel2.tempat_lahir',array(),array('tabel2'=>'tabel2.id_tabel1 = tabel1.id_tabel1'));
Perintah di atas akan menghasilkan SQL “SELECT tabel1.nama, tabel2.tempat_lahir FROM (tabel1) LEFT JOIN tabel2 ON tabel2.id_tabel1 = tabel1.id_tabel1″ tanpa mengikuti pernyataan where sehingga tempat untuk statement where-nya cukup kita buat menjadi array().
Selanjutnya adalah pembahasan Active Record Codeigniter di default_model dengan nama fungsi getDataDB2.
$config1['where'] = array('id_tabel1'=>2);
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Saya lebih suka menggunakan getDataDB2 pada fungsi di default_model yang sudah kita buat tadi, karena memang fungsi ini merupakan pengembangan dari fungsi getDataDB. Dan penggunaannya jauh lebih mudah tinggal Anda buat config-nya saja. Pada perintah di atas akan menghasilkan SQL “SELECT * FROM tabel1 WHERE id_tabel1 = 2″. Nah berikut saya buatkan beberapa contoh lain untuk Anda supaya lebih jelas cara penggunaan Active Record yang sudah dijadikan satu dalam fungsi getDataDB2.
Penggunaan Where :
$config1['where'] = array('id_tabel1 >'=>1,'id_tabel1 <'=>5);  # WHERE id_tabel1 > 1 AND id_tabel1 < 5
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Penggunaan Field :
$config1['where'] = array('id_tabel1'=>2); # WHERE id_tabel1 = 2
$config1['field'] = array('nama'); # field yang akan diambil `nama`. Pisahkan dengan koma jika ada yang lain misal `id_tabel1,nama`.
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Tanpa config, artinya mengambil semua data di tabel1 :
$data['user2'] = $this->default_model->getDataDB2('tabel1');
Penggunaan Join :
$config1['where'] = array('id_tabel1'=>2); # WHERE id_tabel1 = 2
$config1['field'] = array('nama'); # field yang akan diambil `nama`. Pisahkan dengan koma jika ada yang lain misal `id_tabel1,nama`.
$config1['join'] = array('tabel2'=>'tabel2.id_tabel1 = tabel1.id_tabel1'); # Penggunaan join
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Penggunaan Like :
$config1['like'] = array('nama'=>'i');
# $config1['like'] = array('nama'=>array('i','before')); # Contoh lain bearti WHERE nama LIKE '%i'
# $config1['like'] = array('nama'=>array('i','after')); # Contoh lain bearti WHERE nama LIKE 'i%'
# $config1['like'] = array('nama'=>array('i','before')); # Contoh lain bearti WHERE nama LIKE '%i%'
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
 
Sumber: http://catatanbelajar.com/2012/03/menggabungkan-dan-menggunakan-active-record-codeigniter-ke-dalam-satu-method-atau-fungsi/
 
 
 
 
SEKIAN DAN TERIMA KASIH