$_GET['id'] Url 'den gizlemek istiyorum
Arkadaşlar Merhabalar, ödevim için basit bir blog sayfası yapıyorum.
Sayfaya veriler çekiliyor detay sayfasında da veriler geliyor, detay sayfasını açtığım zaman url şu şekilde geliyor.
http://localhost/mezuniyetodevi/deneme-13
ama ben ID olmadan gelmesini istiyorum yani;
http://localhost/mezuniyetodevi/deneme
Bu şekilde mümkün müdür? Biraz araştırdım ama pek bir şey bulamadım.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
Bunun için senin kontrollerin önemli. Diyelim ki normalde eriştiğin linkin şöyle olsun
siteadi.com/blog.php?id=1&url=test-url
Ve sen .htacccess
ile bunu şu hale getirdin
RewriteEngine On
RewriteRule ^([0-9]+)-([0-9a-zA-Z-_]+)$ blog.php?id=$1&url=$2 [QSA]
Artık bu linke şöyle erişiyor olabilmen lazım
siteadi.com/1-test-url
ve blog.php
dosyanda ise id
ve url
i $_GET
ile alıp ona göre kontrol yapıyor olman lazım.
// blog.php
$id = $_GET['id'];
$url = $_GET['url'];
// db işlemleri...
Şimdi sen bu mantıkta hem id'yi hem url'i kontrol ediyorsun. Ancak yapmak istediğin id'yi ortadan kaldırmak ise öncelikle link yapın şöyle olmalı.
siteadi.com/blog.php?url=test-url
buna görede .htaccess
dosyanı şöyle düzenlemelisin
RewriteEngine On
RewriteRule ^([0-9a-zA-Z-_]+)$ blog.php?url=$2 [QSA]
Ve artık şöyle erişiyor olabilmen lazım.
siteadi.com/test-url
Bu mantıktada blog.php
dosyan şöyle olmalı
// blog.php
$url = $_GET['url'];
// db işlemleri -> sadece urle göre konrol edip konu bilgilerini çek
Tablona blog_seourl adında biyer aç
fonksiyon dosyana blogeklettirmek için yazdığın kodların üstüne bu fonksiyonu yaz
$blog_seourl=seo($_POST['blog_ad']); (Kendine göre değiştir)
Daha sonra seo.php adında dosya oluştur içine
<?php
function seo($s) {
$tr = array('ş','Ş','ı','I','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç','(',')','/',' ',',','?');
$eng = array('s','s','i','i','i','g','g','u','u','o','o','c','c','','','-','-','','');
$s = str_replace($tr,$eng,$s);
$s = strtolower($s);
$s = preg_replace('/&amp;amp;amp;amp;amp;amp;amp;amp;.+?;/', '', $s);
$s = preg_replace('/\s+/', '-', $s);
$s = preg_replace('|-+|', '-', $s);
$s = preg_replace('/#/', '', $s);
$s = str_replace('\'', '-', $s);
$s = str_replace('.', '', $s);
$s = str_replace('|', '', $s);
$s = str_replace('&', '', $s);
$s = str_replace('!', '', $s);
$s = trim($s, '-');
return $s;
}
?>
yapıştır ve projene dahil et
.htaccess klasörün yoksa oluştur varsa içine gir
RewriteCond %{REQUEST_"FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^([0-9a-zA-Z-_]+)$ dosya-adi.php?sef=$1 [L,QSA]
bunları yaz kendine göre düzenle
detay sayfana gir php taglarını oluştur
if($_GET['sef'] != "") {
buraya yazacağın kodlar vs vs
}
seo link içinde <a href="<?php echo $blogcek['blog_seourl']; ?>"></a>
olarak çek oldu bitti
ID olmadan unique slugfield ile çekebilirsin. Unique olması için ise ekstra kodlar yazman lazım.
Örnek deneme slug'ın var olup olmadığını kontrol edip , varsa bunu deneme-1 deneme-2 gibi veritabanına kaydetmelisin. Aynı işlemi update işlemlerinde de yapmalısın.
Uzatmayayım veritabanındaki blog tablona bir slug ekle unique key olsun. Onunla id olmadan slug ile çekebelirsin. Benim çözümüm bu şekilde olurdu.