$_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.
Ş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ı
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.