Merhaba arkadaşlar CI Framework'ü kullananlar için link yapısını nasıl değiştirileceğini göstereceğim. Bu dersi elimden geldiğince başlangıç seviyesinde ki arkadaşların anlayabileceği şekilde anlatmaya çalışacağım.
Bu konuyu ilk başlarken çok merak ediyordum ve CI'nin index.php/controller/mehod link yapısına biraz uyuz olmuş ve değiştirmek için kollarımı sıvamıştım. Türkçe kaynak bulamadım. İngilizce kaynaklardan öğrendim ve şimdi sizlere ileteceğim.
index.php'yi Linkten Kaldırmak
Bunu yapmak için CI'nin kök dizininde bir adet .htaccess dosyası oluşturuyoruz. İçerisine şu kodları yazıyoruz.
Ardından application/config/config.php dosyasını açıyoruz. İçerisinde bulunan
kodu şu kod ile değiştiriyoruz.
Yani index.php kısmını kaldırıyoruz.
SEO Dostu Linkleri Kullanmak
Kafanızda ki link yapılarını kullanabilmek için htaccess'de yaptığınız gibi link yapısını framework'e tanıtmamız gerekmektedir. Mantık olarak htaccess ile aynı ancak bu sefer htaccess üzerinden değilde application/config/routes.php dosyası üzerinden ayarlamalarımızı yapacağız.
Bu kodun altından hemen link yapımızı oluşturalım.
Şimdi burada oluşturmuş olduğum link yapısını sizlere açıklıyayım. $route dizisinde anahtar olarak kullandığım kısım bizim link yapımız. Bu anahtarın alacağı değer ise aslında çalışacak olan linktir. Yani biz http://siteadresi.com/blog/2/deneme.html linkine girdiğimizde aslında http://siteadresi.com/welcome/seolink/2/deneme linkini çalıştırmış olacağız. Başlangıç seviyesinde ki arkadaşlar belki anlamayabilir. Burada welcome bizim controllerimiz seolink ise bu controllerimizin içersinde ki methoddur. Şimdi bu methodumuzu oluşturalım.
Şimdi seolink_view adında bir view dosyası oluşturalım. İçeriğini de şu şekilde yapalım.
Şimdi bu şekilde http://siteadresi.com/blog/2/deneme.html linkini çalıştırdığımız da ekran çıktısı şu şekilde olacaktır.
Anlayamadığınız kısımları sorabilirsiniz. Ben bildiğim kadarını aktarmaya çalıştım.
Unutmadan link yapısında bazı özel durumlar kullandık. Bunları da konunun sonuna ekleyeyim.
Tabi bunların yerine Regex'de kullanabilirsiniz. Örneğin
Bu konuyu ilk başlarken çok merak ediyordum ve CI'nin index.php/controller/mehod link yapısına biraz uyuz olmuş ve değiştirmek için kollarımı sıvamıştım. Türkçe kaynak bulamadım. İngilizce kaynaklardan öğrendim ve şimdi sizlere ileteceğim.
index.php'yi Linkten Kaldırmak
Bunu yapmak için CI'nin kök dizininde bir adet .htaccess dosyası oluşturuyoruz. İçerisine şu kodları yazıyoruz.
Kod:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
PHP:
$config['index_page'] = 'index.php';
PHP:
$config['index_page'] = '';
SEO Dostu Linkleri Kullanmak
Kafanızda ki link yapılarını kullanabilmek için htaccess'de yaptığınız gibi link yapısını framework'e tanıtmamız gerekmektedir. Mantık olarak htaccess ile aynı ancak bu sefer htaccess üzerinden değilde application/config/routes.php dosyası üzerinden ayarlamalarımızı yapacağız.
PHP:
$route['404_override'] = '';
PHP:
$route['blog/(:num)/(:any)\.html'] = "welcome/seolink/$1/$2";
PHP:
public function seolink()
{
// SEF ve ID bilgilerini almak için url helperını yüklüyoruz.
$this->load->helper("url");
// Url helperında bulunan segment methodunu kullanarak gerekli alanları çekiyoruz.
$sef = $this->uri->segment(3,0);
$id = $this->uri->segment(2,0);
$data['sef'] = $sef;
$data['id'] = $id;
$this->load->view('seolink_view',$data);
}
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Başlık</title>
</head>
<body>
Gönderilen ID: <?php echo $id; ?><br />
Gönderilen SEF: <?php echo $sef; ?>
</body>
</html>
Kod:
Gönderilen ID: 2
Gönderilen SEF: deneme.html
Unutmadan link yapısında bazı özel durumlar kullandık. Bunları da konunun sonuna ekleyeyim.
num) = Numara tipinde veriler
any) = Herhangi bir veri
Tabi bunların yerine Regex'de kullanabilirsiniz. Örneğin
num) yerine ([0-9]+)
any) yerine (.*?)