PHP'de Kalıcı Bağlantı (Permalink) Yapımı
Kalıcı baÄŸlantı, .htaccess kullanarak sanal baÄŸlantı oluÅŸturmanıza yardımcı olan bir yöntemdir. Forum ve blog gibi sistemlerde bolca kullanıldığı gibi alışveriÅŸ sistemleri gibi arama motorlarına "güzel görünmek" için web'de yayın olarak kullanılır.
AÅŸağıda en basit haliyle olmasa da basit bir ÅŸekilde anlatmaya çalıştım.
.htaccess dosyası :
Options +FollowSymLinks
RewriteEngine on
#anasayfayi direk permalink.php ye yonlendiriyoruz
rewriterule index.php$ permalink.php
#alttaki iki satir:
#dosya degilse (not file = !-f [file])
RewriteCond %{REQUEST_FILENAME} !-f
#dizin (klasor) degilse (not directory = !-d [directory])
RewriteCond %{REQUEST_FILENAME} !-d
#gelen tum istekleri, permalink.php de `parametreler` argumanina gonder
rewriterule (.*)$ permalink.php?parametreler=$1
permalink.php dosyası :
<?php // session kullanilacaksa 'session_start();' buraya gelecek // Veritabani baglantisi gibi seyleri burada yazin/* * .htaccess gelen tum verileri bu dosyaya parametreler * argumanina GET (query stringi) olarak gonderiyor */ // parametre gelmediyse (indexten gelmiyor mesela) // hata almamak icin manuel olarak bos parametre atiyoruz if(!isset($_GET["parametreler"])) { $_GET["parametreler"] = ""; } // gelen parametre'yi slash (/) isaretinden boluyoruz $params = split("/",$_GET["parametreler"]); // parametreler arasinda bos olma ihtimaline karsi kontrol yapiyoruz
for($dng = 0,$max = count($params);$dng < $max;$dng++) { if(empty($params[$dng])) { unset($params[$dng]); } } // parametre sayisini buluyoruz (asagida lazim olacak ;] ) $paramAdet = count($params); // cagirilacak dosyayi once null olarak setliyoruz $include = null; if(isset($params[0])) { switch($params[0]) { case "anasayfa" : $include = "index.php"; break; case "iletisim" : $include = "iletisim.php"; break; case "yazi" : if($paramAdet > 1) { // ornek olarak yaziyorum sorguyu $sqlString = "select * from yazilar where permalink='{$params[$paramAdet - 1]}'"; $query = mysql_query($sqlString); if(mysql_num_rows($query) > 0) { $yazi = mysql_fetch_array($query); define("yaziID", $yazi["ID"]); $include = "yazi.php"; } /* * `sqlString`e bakacak olursaniz orada en son parametre geliyor * buradaki amac mesela yazi/kategori1/kategori2/yazi_permalinki * (bendeki kategori mantigina bakabilirsiniz - yazilar degil) * gibi linkleri parse etmek
*/ } default : // harici durumlarda // gondermek istediginiz dosya varsa alttaki satirda belirtin // $include = "dosya.php"; break; } } else { $include = "index.php"; } // eger hicbir dosyaya gitmiyorsa sayfa bulunamadi olarak 404.php sayfasina gidecek
if(is_null($include)) { $include = "404.php"; } include($include); ?>
/*
* .htaccess gelen tum verileri bu dosyaya parametreler
* argumanina GET (query stringi) olarak gonderiyor
*/
// parametre gelmediyse (indexten gelmiyor mesela)
// hata almamak icin manuel olarak bos parametre atiyoruz
if(!isset($_GET["parametreler"])) {
$_GET["parametreler"] = "";
}
// gelen parametre'yi slash (/) isaretinden boluyoruz
$params = split("/",$_GET["parametreler"]);
// parametreler arasinda bos olma ihtimaline karsi kontrol yapiyoruz